建议36:使用FCL中的委托声明FCL中存在3类这样的委托声明,它们分别是:Action、Func、Predicate。尤其是在它们的泛型版本出来以后,已经能够满足我们在实际编码过程中的大部分需求。Action表示接受0个或多个输入参数,执行一段代码,没有任何返回值;Func表示接受0个或多个输入参...
建议37:使用Lambda表达式代替方法和匿名方法在建议36中,我们创建了这样一个实例程序: static void Main(string[] args) { Func add = Add; Action print = Pr...
建议35:使用default为泛型类型变量指定初始值有些算法,比如泛型集合List的Find算法,所查找的对象可能会是值类型,也有可能是引用类型。在这种算法内部,我们常常会为这些值类型或引用类型变量指定默认值。于是,问题来了:值类型变量的默认初始值是0值,而引用类型变量的默认初始值是null值,显然...
建议34:为泛型参数设定约束“约束”这个词可能会引起歧义,有些人肯能认为对泛型参数设定约束是限制参数的使用,实际情况正好相反。没有“约束”的泛型参数作用很有限,倒是“约束”让泛型参数具有了更多的行为和属性。查看下面代码,我们会发现参数t1或参数t2仅仅具有object的属性和行为,所以几乎不能再方法...
建议33:避免在泛型类型中声明静态成员在上一建议中,已经理解了应该将MyList和MyList视作两个完全不同的类型,所以,不应该将MyList中的静态成员理解成MyList和MyList共有的成员。 class MyList { public static int Cou...
建议32:总是优先考虑泛型泛型的优点是多方面的,无论泛型类还是泛型方法都同时具备可重用性、类型安全性和高效率等特性,这是非泛型和非泛型方法无法具备的。以可重用性为例: class MyList { private int[] items; public int...
建议30:使用LINQ取代集合中的比较器和迭代器LINQ提供了类似于SQL的语法来实现遍历、筛选与投影集合的功能。 static void Main(string[] args) { List companySalary = new List() ...
建议31:在LINQ查询中避免不必要的迭代无论是SQL查询还是LINQ查询,搜索到结果立刻返回总比搜索完所有的结果再将结果返回的效率要高。示例代码: class MyList : IEnumerable { //为了演示需要,模拟了一个元素集合 List li...
建议29:区别LINQ查询中的IEnumerable和IQueryableLINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable接口的集合进行扩展;Queryable类,它针对继承了IQueryable接口的集...
分类:
编程语言 时间:
2015-08-15 01:25:22
阅读次数:
135
实现1:《高质量c++,c编程指南》 void *mymemcpy(void *dst,const void *src,size_t num) { assert((dst!=NULL)&&(src!=NULL)); //assert(d...
分类:
其他好文 时间:
2015-08-15 00:10:18
阅读次数:
209