#57个

【转】编写高质量代码改善C#程序的157个建议——建议30:使用LINQ取代集合中的比较器和迭代器

 建议30:使用LINQ取代集合中的比较器和迭代器LINQ提供了类似于SQL的语法来实现遍历、筛选与投影集合的功能。staticvoidMain(string[]args){List<Salary>companySalary=newList<Salary>(){newSalary(){...

【转】编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>

 建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展;Queryabl...

【转】编写高质量代码改善C#程序的157个建议——建议28:理解延迟求值和主动求值之间的区别

 建议28:理解延迟求值和主动求值之间的区别要理解延迟求值(lazyevaluation)和主动求值(eagerevaluation),先看个例子:List<int>list=newList<int>(){0,1,2,3,4,5,6,7,8,9};vartemp1=fromcinlis...

【转】编写高质量代码改善C#程序的157个建议——建议27:在查询中使用Lambda表达式

 建议27:在查询中使用Lambda表达式LINQ实际上是基于扩展方法和Lambda表达式的。任何LINQ查询都能通过扩展方法的方式来代替。varpersonWithCompanyList=frompersoninpersonListselectnew{PersonName=person.Name,Compa...

【转】编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果

 建议26:使用匿名类型存储LINQ查询结果从.NET3.0开始,C#开始支持一个新特性:匿名类型。匿名类型有var、赋值运算符和一个非空初始值(或以new开头的初始化项)组成。匿名类型有如下基本特性:即支持简单类型也指出复杂类型。简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项。匿名类型...

【转】编写高质量代码改善C#程序的157个建议——建议25:谨慎集合属性的可写操作

 建议25:谨慎集合属性的可写操作如果类型的属性中有集合属性,那么应该保证属性对象是由类型本身产生的。如果将属性设置为可写,则会增加抛出异常的几率。一般情况下,如果集合属性没有值,则它返回的Count等于0,而不是集合属性的值为null。下面的代码将产生一个NullReferenceException异常:c...

【转】编写高质量代码改善C#程序的157个建议——建议23:避免将List<T>作为自定义集合类的基类

 建议23:避免将List<T>作为自定义集合类的基类如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口。FCL结合类应该以组合的形式包含至自定义的集合类,需要扩展的泛型接口通常是IEnumerable<T>和ICollection<T>...

【转】编写高质量代码改善C#程序的157个建议——建议24:迭代器应该是只读的

 建议24:迭代器应该是只读的如果注意观察会发现,FCL中的迭代器只有GetEnumerator方法,没有SetEnumerator方法,所有的集合类也没有一个可以写的迭代器属性。原因有二:一:这违背了设计模式的开闭原则。被设置到集合中的迭代器可能会直接导致集合的行为发生异常或变动。一旦确实需要新的迭代要求,...

【转】编写高质量代码改善C#程序的157个建议——建议22:确保集合的线程安全

 建议22:确保集合的线程安全集合线程安全是指多个线程上添加或删除元素时,线程键必须保持同步。下面代码模拟了一个线程在迭代过程中,另一个线程对元素进行了删除。classProgram{staticList<Person>list=newList<Person>(){newPerson(...

【转】编写高质量代码改善C#程序的157个建议——建议21:选择正确的集合

 建议21:选择正确的集合要选择正确的集合,首先要了解一些数据结构的知识。所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合。集合的分类参考下图:由于非泛型集合存在效率低及非类型安全的缺点,所以这里只讨论泛型集合。如果集合的数目固定并且不涉及转型,使用数组效率高,否则使用List<T>...

【转】编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合

 建议20:使用泛型集合代替非泛型集合在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型。很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况:ArrayListal=newArrayList();al.Add(0);al.Ad...

【转】编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化

 建议19:使用更有效的对象和集合初始化 依赖于属性和FCL3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项。对象初始化:classPerson{publicstringName{get;set;}publicintAge{get;set;}}classP...

【转】编写高质量代码改善C#程序的157个建议——建议17:多数情况下使用foreach进行循环遍历

 建议17:多数情况下使用foreach进行循环遍历由于本建议涉及集合的遍历,所以在开始讲解本建议之前,我们不妨来设想一下如何对结合进行遍历。假设存在一个数组,其遍历模式可以采用依据索引来进行遍历的方法;又假设存在一个HashTable,其遍历模式可能是按照键值来进行遍历。无论是哪个集合,如果他们的遍历没有一...

【转】编写高质量代码改善C#程序的157个建议——建议18:foreach不能代替for

 建议18:foreach不能代替for上一个建议中提到了foreach的两个优点:语法更简单,默认调用Dispose方法,所有我们强烈建议在实际的代码编写中更多的使用foreach。但是,该建议也有不适合的场景。foreach存在一个问题:它不支持循环时对集合进行增删操作。比如,运行下面代码会抛出异常Inv...

【转】编写高质量代码改善C#程序的157个建议——建议16:元素数量可变的情况下不应使用数组

 建议16:元素数量可变的情况下不应使用数组在C#中,数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建。而数组本身,尤其是一维数组,在遇到要求高效率的算法时,则会专门被优化以提升其效率。一维数组也成为向量,其性能是最佳的,在I...
首页上一页...23456...下一页尾页