本书赞誉
译者序
前言
第1章 C#语言的编程习惯1
第1条:优先使用隐式类型的局部变量1
第2条:考虑用readonly代替const8
第3条:优先考虑is或as运算符,尽量少用强制类型转换12
第4条:用内插字符串取代string.Format()20
第5条:用FormattableString取代专门为特定区域而写的字符串24
第6条:不要用表示符号名称的硬字符串来调用 API26
第7条:用委托表示回调28
第8条:用null条件运算符调用事件处理程序31
第9条:尽量避免装箱与取消装箱这两种操作34
第10条:只有在应对新版基类与现有子类之间的冲突时才应该使用 new修饰符38
第2章 .NET的资源管理42
第11条:理解并善用 .NET的资源管理机制42
第12条:声明字段时,尽量直接为其设定初始值47
第13条:用适当的方式初始化类中的静态成员50
第14条:尽量删减重复的初始化逻辑52
第15条:不要创建无谓的对象60
第16条:绝对不要在构造函数里面调用虚函数64
第17条:实现标准的dispose 模式67
第3章 合理地运用泛型74
第18条:只定义刚好够用的约束条件76
第19条:通过运行期类型检查实现特定的泛型算法82
第20条:通过IComparable及IComparer定义顺序关系88
第21条:创建泛型类时,总是应该给实现了IDisposable的类型参数提供支持95
第22条:考虑支持泛型协变与逆变98
第23条:用委托要求类型参数必须
提供某种方法104
第24条:如果有泛型方法,就不要
再创建针对基类或接口的
重载版本110
第25条:如果不需要把类型参数所
表示的对象设为实例字段,
那么应该优先考虑创建泛
型方法,而不是泛型类114
第26条:实现泛型接口的同时,还
应该实现非泛型接口118
第27条:只把必备的契约定义在接
口中,把其他功能留给扩
展方法去实现124
第28条:考虑通过扩展方法增强已
构造类型的功能128
第4章 合理地运用LINQ131
第29条:优先考虑提供迭代器方法,
而不要返回集合131
第30条:优先考虑通过查询语句来
编写代码,而不要使用循环
语句137
第31条:把针对序列的API设计得
更加易于拼接142
第32条:将迭代逻辑与操作、谓词
及函数解耦149
第33条:等真正用到序列中的元素
时再去生成153
第34条:考虑通过函数参数来放松
耦合关系155
第35条:绝对不要重载扩展方法162
第36条:理解查询表达式与方法调
用之间的映射关系165
第37条:尽量采用惰性求值的方式
来查询,而不要及早求值177
第38条:考虑用lambda表达式来
代替方法182
第39条:不要在Func与Action中
抛出异常186
第40条:掌握尽早执行与延迟执行
之间的区别188
第41条:不要把开销较大的资源捕
获到闭包中193
第42条:注意IEnumerable与
IQueryable形式的数据
源之间的区别206
第43条:用Single()及First()
来明确地验证你对查询结果
所做的假设211
第44条:不要修改绑定变量214
第5章 合理地运用异常220
第45条:考虑在方法约定遭到违背
时抛出异常220
第46条:利用using与try/finally
来清理资源224
第47条:专门针对应用程序创建异常231
第48条:优先考虑做出强异常保证237
第49条:考虑用异常筛选器来改写
先捕获异常再重新抛出的
逻辑244
第50条:合理利用异常筛选器的副
作用来实现某些效果248
中英文词汇对照表252
^ 收 起