备忘!持续更新!

      1.在进行sql时间查询匹配的时候,用builder.AppendFormat(" and CheckTime>='{0}'",searchInfo.CheckTime.ToString("yyyyMMdd"))这样比较合理,能利用到索引。

      2.string a="1"; bool b=Convert.ToBoolean(a);抛出异常,也就意味着TryPrase返回为假。

      3.DateTime.ToString("yyyy-MM-dd HH:mm:ss");和DateTime.ToString("yyyy-MM-dd hh:mm:ss");有区别,前者24小时制,后者12小时制。

      4.在两个类里面互相定义的话,会造成类的循环引用。由于在项目中有一个类引用了DAL层,而DAL层进行数据库连接的创建,因此这会造成循环创建。运行时会堆栈溢出。

      5.扩展方法最终还是会编译成静态方法。string.ExtendMethod()在某个string实列为空的情况下是不会抛出异常的。

      6.对于Nullable类型,.NET下的Nullable类是一个静态类,是提供给可以为空的值类型的某些操作支持,类似于一个接口。而.NET下的int?这个会被编译为Nullable<T>类型。注意Nullable<T>类型是一个值类型。bool? b = null;object o = b;这里由于b为空因此在给o赋值的时候是不会进行装箱的。但是,

bool? b = false;
int? i = 44;
object bBoxed = b; // bBoxed contains a boxed bool.
object iBoxed = i; // iBoxed contains a boxed int.

   这上面的代码都会进行装箱。而且装箱的是bool,int类型不会是Nullable<T>类型。

    7.数组类型是从抽象基类型 Array 派生的引用类型。由于此类型实现了 IEnumerableIEnumerable,因此可以对 C# 中的所有数组使用 foreach 迭代。而Array有提供了一些数组的常用方法。在对数组进行某些采用的操作时可以直接拿来用。发现自己基础不好呀.....

    8..NET下引用类型使用"="进行赋值的时候,会使两个对象指向同一个引用。而用"=="进行比较判断的是判断两个对象是不是指向同一个引用。但是string却不是这样的。

    9.as运算符是用来进行类似强制转换操作,但是其转换失败不会抛出异常,会返回null。expression as type   expression的类型要和type兼容,要么和其一致要么是他的子类。is运算符也是用于检查对象是否与执行类型兼容,其返回的是bool值,兼容返回真,不兼容返回假。

    10.当我们将一个对象用xml序列化到MemoryStream时,MemoryStream的Position位置是最后一个位置,如果我们要使用StreamReader来读取的时候需要将其Position属性设置为0。否则使用StreamReader得到的字符串为空。

    11.关于int.Prase(string)和Convert.ToInt32(string)的区别,都知道的是后者在string为null的时候是返回为空的,在string.empty的情况下两者是都会有区别的,但是在不抛出异常的情况下,究竟是哪一个想效率更高些。通过Refelector可以发现Convert.ToInt32的代码如下:

public static int ToInt32(string value)
{
    if (value == null)
    {
        return 0;
    }
    return int.Parse(value, CultureInfo.CurrentCulture);
}

     通过上面的代码可以发现Convert.ToInt32是在做一次判断是否为null之后在调用int.Prase。因此可以得出这样的结论,在可以确定成功的将string参数转换int的情况下,要使用int.Prase。当然这个结论也是可以推广到其他的类型,如我们将int转换为string的时候,int.ToString的效率比Convert .ToString(int)的效率高。

    12.const常量是在编译时就需要确定字段的初始值的,而readonly却不是这样,其是可以在运行时确定初始值的。

    13.在.NET下对于非静态变量在使用完毕后,使用这样的语句testClass=null并不能加速GC对其回收的速度。因为在一次GC回收的过程中,如果发现一个非静态的局部变量没有在其他地方被引用,GC回收器会发现其跟引用为空,会实现对这个变量的回收。正如园子里的朋友所讲,增加这一句类似于脱掉裤子放屁。

testClass=new TestClass();//使testClass在栈的值指向内存中的某个引用

testClass=null;  //使testClass在栈的值没有指向某个引用,如果在没有GC的情况下上面是会造成内存泄露的。但是GC会自动帮助我们回收上面的内存。因此赋值为null这一句是没有必要的,因此在testClass没有再被引用的时候,会自动被回收。

     14.IList list1 = new List<int>();
          IList<int> list2 = new List<int>();

          上面这两句代码是有重要差别的,IList非泛型的集合类型,集合项是object类型的。因此第一句代码势必引起频繁的装箱和拆箱操作。多注意下小细节,否则伤不起呀!

     15.IDataReader.Read()和IDataReader.NextResult()的区别。

     16.List和LinkList的区别就是数据结构中线性表的区别。

     17.

posted @ 2011-03-03 23:25  雁北飞  阅读(292)  评论(0编辑  收藏  举报