编程小问题和Tips(C#)

原创 2012年03月31日 06:07:34

C# 方面

1、关于C#参数传递的问题,除了int,long,string等是按值传递外,其他的一些类,结构体都默认是引用传递,相当于关键字ref,ref,out等关键字也主要用于按值传递的参数修饰

2、C#中的[Serializable] 序列化 Serializable这个标签是类可以被序列化的特性,表示这个类可以被序列化。什么叫序列化?我们都知道对象是暂时保存在内存中的,不能用U盘考走了,有时为了使用介质转移对象,并且把对象的状态保持下来,就需要把对象保存下来,这个过程就叫做序列化,通俗点,就是把人的魂(对象)收伏成一个石子(可传输的介质)什么叫反序列化?就是再把介质中的东西还原成对象,把石子还原成人的过程。在进行这些操作的时候都需要这个可以被序列化,要能被序列化,就得给类头加[Serializable]特性。通常网络程序为了传输安全才这么做。

3、string stringbuffer stringbuilder

        对于String类型,每次的操作都相当于new一个然后再进行append 等一系列操作,会对内存的影响非常大,但是速度较快

        对于StringBuffer类型,Java.lang.StringBuffer线程安全的可变字符序列速度较慢。类似于 String 的字符串缓冲区,但不能修改

        对于StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快,但是如果将 StringBuilder 的实例用于多个线程是不安全的。需要这样的同步,则建议使用 StringBuffer

        大部分情况下 StringBuilder>StringBuffer>String

4、字符串前加@ ""表示忽略字符串的转义字符\

5、创建DataRow得先创建DataTable后再创建

6、Ajax不是程序,无刷新状态将数据提交给后台,后台处理结果在浏览器做相应的处理,传数据前台html代码从一般处理程序的后台写前台.aspx文件完全可以实现

      .ashx的功能 .ashx性能高,免去了控件解析以及页面处理过程,适合于生成动态图片,生成动态文本之类,实现某一具体功能的操作,比较复杂的功能,处理回发控件的事件则不合适

7、.net 编译器编译成 IL语言代码(intermediate language) 交给.net vm 再转换成本地代码,与CPU寄存器打交道

8、ref C#输入相当于 C指针

9、各个项目连接通过解决方案 引用 C# 注意namespace的应用

10、asp:fileupload控件中,若上传文件大小为0,则hasfile为智能判断为false

11、<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

过时了,现在html5推荐的是
<!DOCTYPE html>
<html>

会造成一些图标位置问题

12、Thread was being aborted 在捕获异常的try块中使用response.redirect或者response.write();response.end();有时会提示线程已被终止("Threading was being aborted")错误;

分析该错误的原因是因为执行这两条命令会重新发送一次请求,将当前的请求abort掉;通俗讲就是当进程还想继续进行的时候,发现自己已经被调用过abort方法了,既然自己作为线

程已被终止,就无法继续执行了,于是抛出异常

解决方法有以下三种:

1、将这两个命令放到try/catch块外,不捕获异常就不会提示这个错误;

2、捕获异常时进行判断:

try
{}
catch(Exception e)
{
if(!(ex is System.Threading.ThreadAbortException))
{
//在这里显示错误
}
}

3、捕获进程终止错误不做处理

try
{}
catch (ThreadAbortException)
{ }
catch(Exception ex)
{
//显示错误
}
有网友说可以在Response.Write();加上Response.Clear();不知道这个方法是否可行;
13、Response.Clear();
       //优先取得代理IP
       string IP= Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
       if (string.IsNullOrEmpty(IP))
       {
         
//没有代理IP则直接取客户端IP
          IP= Request.ServerVariables["REMOTE_ADDR"];
       }

       Response.Write(IP);
Response.End();
但可以用request.Headers.Add("X_FORWARDED_FOR","0.0.0.0");伪造
严格说,HTTP HEADER 只能是ASCII编码,因为Client没有办法取得HEADER的编码信息(内容编码在Header定义)。浏览器总是用当前机器的缺生编码方式解码HTTP HEADER,所以对你的例子,如果Server用GB2312 Encoding,Client用GB2312 Decoding,就没有问题。如果Client的缺生Encoding不是GB2312,就有问题了(比如我的机器,缺省Encoding是英文,UTF-8,通过你的连接就不能得到正确的中文文件名)。

.NET WebRequest总是用UTF-8解码HTTP Header(至少我没发现如何改变这种行为),所以如果Server用的是GB2312,那么结果总是不会对。唯一的办法是对string重新编码(纯粹Hack行为):

                if (key == "Content-Disposition")
                {
                    string str = res.Headers[key];
                    byte[] bt = new byte[str.Length];
                    for (int i = 0; i < str.Length; ++ i )
                    {
                        bt[i] = (byte)str[i];
                    }
                    Console.WriteLine("{0} = {1}",
                        key,
                        Encoding.GetEncoding("GB2312").GetString(bt));
                }
14、一个局部变量通常通过指定的类型名称和说明符来定义,它指定了变量名称和一个任意的初始值<A local variable is defined by specifying a type name and a declarator that specifies the variable name and an optional initial value>(ECMA-334 C# 8.3 Variables and parameters)

1、变量是类或者结构中的字段,如果没有进行显示赋值,在默认状态下创建相应变量时,其值为对应类型默认值。

2、方法的局部变量必须在代码中显示初始化,之后才可以在语句中进行使用。

15、SqlConnection的Close和Dispose是一样的效果,区别是Dispose之后不能再Open。

相关文章推荐

编程小问题和Tips(数据库)

1、sql numberic(m,n) m是总位数 n 是小数位 identity(1,1)自动从1开始编号插一行系统自动加1 2、grant all privileges(所有权限) on *.*(...

C#案例——解决你的小问题哦

  • 2011年04月25日 15:52
  • 3KB
  • 下载

C#高效编程TIPS

摘录自这个微博http://www.cnblogs.com/luminji/ 1 as,is转型比强制转型的优势 优势在于as,is 不抛出异常,如果转型失败,则返回null 强制转型则会...

Python 编程小问题汇总(一)

Python 编程过程中遇到的小问题及解决方案整理。

qt编程遇到的小问题

1、如果类继承的是QMainWindow则在底层QWidget上面会加上Central Widget等QWidget,所以如果类继承的是QMainWindow则在上面添加QWidget的时候需要 Q...

SQL编程之小问题的解决思路

•需求说明: –查询学生出生日期,计算出每个学生的年龄。如果学生年龄大于等于18岁,输出“恭喜,你已经是成年人了。”,否则显示“希望你早日长大。”   思路:   •获得学生出生...

你可能不知道的编程小问题:预处理、sizeof

面试题九、用一个定义宏FIND求一个结构体stuct里

java读书笔记-常用类-编程小问题

最近刚好再复习一下java SE,把这些小问题总结一下。

最近遇到的单片机编程小问题总结

2013.07.20: 1、时间太长,记不清在哪个项目里遇到的,指向code区数组的指针也要加 code 关键字声明。 比如 unsigned char code arr[30]; 数组,要用指...

再见编程小问题

1、int main()前面为什么int而不用void,这是为了系统调用方便 2、变量的生命周期和{}相关 3、大小端模式的问题:我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程小问题和Tips(C#)
举报原因:
原因补充:

(最多只允许输入30个字)