建议28:理解延迟求值和主动求值之间的区别要理解延迟求值(lazy evaluation)和主动求值(eager evaluation),先看个例子: List list = new List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; ...
建议27:在查询中使用Lambda表达式LINQ实际上是基于扩展方法和Lambda表达式的。任何LINQ查询都能通过扩展方法的方式来代替。var personWithCompanyList = from person in personList ...
建议26:使用匿名类型存储LINQ查询结果从.NET3.0开始,C#开始支持一个新特性:匿名类型。匿名类型有var、赋值运算符和一个非空初始值(或以new开头的初始化项)组成。匿名类型有如下基本特性:即支持简单类型也指出复杂类型。简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项。...
建议24:迭代器应该是只读的如果注意观察会发现,FCL中的迭代器只有GetEnumerator方法,没有SetEnumerator方法,所有的集合类也没有一个可以写的迭代器属性。原因有二:一:这违背了设计模式的开闭原则。被设置到集合中的迭代器可能会直接导致集合的行为发生异常或变动。一旦确实需要新的迭...
建议23:避免将List作为自定义集合类的基类如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口。FCL结合类应该以组合的形式包含至自定义的集合类,需要扩展的泛型接口通常是IEnumerable和ICollection(或ICollection的子接口,如ILis...
第一章文件结构分为两个文件 1.头文件:保存程序的声明。C/C++都是".h"为后缀 2.定义文件:保存程序的实现。C".c"为后缀,C++".cpp"为后缀1.1版权和版本的说明位置:头文件和定义文件的开头。(版本信息)(文件名称、标识符、摘要)(当前版本号、作者、完成日期)(版本历史信..
分类:
编程语言 时间:
2015-08-14 19:25:05
阅读次数:
200
建议22:确保集合的线程安全集合线程安全是指多个线程上添加或删除元素时,线程键必须保持同步。下面代码模拟了一个线程在迭代过程中,另一个线程对元素进行了删除。 class Program { static List list = new List() {...
分类:
编程语言 时间:
2015-08-14 18:57:12
阅读次数:
145
建议20:使用泛型集合代替非泛型集合在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型。很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: ArrayList al=new ArrayList...
建议17:多数情况下使用foreach进行循环遍历由于本建议涉及集合的遍历,所以在开始讲解本建议之前,我们不妨来设想一下如何对结合进行遍历。假设存在一个数组,其遍历模式可以采用依据索引来进行遍历的方法;又假设存在一个HashTable,其遍历模式可能是按照键值来进行遍历。无论是哪个集合,如果他们的遍...
建议16:元素数量可变的情况下不应使用数组在C#中,数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List来创建。 而数组本身,尤其是一维数组,在遇到要求高效率的算法时,则会专门被优化以提升其效率。一维数组也成为向量,其性能是最佳的,在IL中使用...
分类:
编程语言 时间:
2015-08-13 19:33:07
阅读次数:
179