C# 3.0 Cookbook中文版(第3版)
C# 3.0 Cookbook中文版(第3版)
Jay Hilyard, Stephen Teilhet
陈宗斌 等译
出版时间:2008年12月
页数:702
当你在使用C# 3.0的过程中陷入困境而需要快速找到解决方案时,为什么要辛苦地读完一本教程呢?这本最畅销书现在提供了超过250个代码秘诀,针对的是C#程序员面临的常见和不那么常见的问题。本书添加了许多新秘诀,从以前版本继承来的大多数秘诀都经过了修订,以便帮助你利用C# 3.0和.NET 3.5平台提供的能力——以及克服它们提出的挑战。

本书用一整章的篇幅介绍了用于LINQ(语言级集成查询)的秘诀,并用额外两章介绍了使用扩展方法的秘诀,还介绍了lambda表达式、对象和集合初始化器、新的同步原语以及LINQ to XML等。本书中的每个秘诀都提供了对单个问题的解决方案,讨论了它为什么会工作,并且提供了查找额外信息的资源。

你将找到用于以下方面的秘诀:

* LINQ及其与对象、ADO.NET和XML的结合使用
* 文件系统交互
* 字符串和字符
* Web站点访问和确定Web站点配置
* 类和结构
* XML的使用(包括LINQ to XML、XPath
* 泛型以及何时适合使用它们 和XSLT)
* 集合
* 使用.NET连通性选项的联网
* 异常处理
* 线程
* 委托、事件和lambda表达式
* 数字数据类型和枚举
* 不属于.NET Framework类库一部分的数据结构和算法

你还将发现其他一些秘诀,它们用于加密和解密、控制对类型的访问、安全地存储数据、使用编程性安全和声明性安全等。所有的解决方案都是使用Visual Studio .NET 2008开发的。

本书的补充资源是一个公共共建性网站,它包括C# 2.0秘诀的以前版本,C# 3.0版本没有修改它们。
  1. 前言
  2. 第1章 语言级集成查询(LINQ)
  3. 1.0 简介
  4. 1.1 查询消息队列
  5. 1.2 使用带有数据的集合语义
  6. 1.3 利用LINQ to SQL重用参数化查询
  7. 1.4 以一种文化敏感的方式对结果排序
  8. 1.5 添加用于LINQ的功能扩展
  9. 1.6 跨数据库执行查询和连接
  10. 1.7 利用LINQ查询配置文件
  11. 1.8 直接从数据库创建XML文件
  12. 1.9 有选择地输出查询结果
  13. 1.10 结合使用LINQ与不支持IEnumerable<T>的集合
  14. 第2章 字符串和字符
  15. 2.0 简介
  16. 2.1 确定char包含的字符种类
  17. 2.2 在比较两个字符时控制大小写敏感性
  18. 2.3 在一个字符串内寻找另一个字符串出现的所有位置
  19. 2.4 在比较两个字符串时控制大小写敏感性
  20. 2.5 把一个字符串与另一个字符串的头部或尾部作比较
  21. 2.6 插入文本到字符串中
  22. 2.7 删除或替换字符串内的字符
  23. 2.8 把二进制数据编码为base64格式
  24. 2.9 解码base64编码的二进制数据
  25. 2.10 把作为byte[ ]返回的字符串转换为字符串
  26. 2.11 把字符串传递给只接受byte[]的方法
  27. 2.12 把字符串转换为其他类型
  28. 2.13 创建定界字符串
  29. 2.14 从定界字符串中提取数据项
  30. 2.15 遍历字符串中的每个字符
  31. 2.16 从字符串的头部和/或尾部删除字符
  32. 2.17 测试字符串是否为null或者长度为0
  33. 2.18 追加行
  34. 第3章 类和结构
  35. 3.0 简介
  36. 3.1 创建联合类型的结构
  37. 3.2 使类型可排序
  38. 3.3 使类型可检索
  39. 3.4 间接重载+=、-=、/=和*=运算符
  40. 3.5 间接重载&&、||和?:运算符
  41. 3.6 创建无错的表达式
  42. 3.7 简化布尔逻辑
  43. 3.8 以程序设计语言无关的方式在简单类型之间转换
  44. 3.9 确定何时使用强制转换运算符、as运算符或is运算符
  45. 3.10 利用as运算符进行强制转换
  46. 3.11 利用is运算符确定变量的类型
  47. 3.12 从一个方法返回多个数据项
  48. 3.13 解析命令行参数
  49. 3.14 在运行时初始化常量字段
  50. 3.15 构建可复制的类
  51. 3.16 确保处理对象
  52. 3.17 处理非托管资源
  53. 3.18 确定装箱和拆箱的位置
  54. 第4章 泛型
  55. 4.0 简介
  56. 4.1 确定使用泛型的时间和位置
  57. 4.2 理解泛型类型
  58. 4.3 利用对应的泛型替换ArrayList
  59. 4.4 用对应的泛型替换Stack和Queue
  60. 4.5 使用链表
  61. 4.6 创建可以初始化为null的值类型
  62. 4.7 反转有序链表中的内容
  63. 4.8 以泛型方式创建只读集合
  64. 4.9 利用对应的泛型替换Hashtable
  65. 4.10 对泛型Dictionary类型使用foreach
  66. 4.11 约束类型参数
  67. 4.12 将泛型变量初始化为它们的默认值
  68. 第5章 集合
  69. 5.0 简介
  70. 5.1 交换数组中的两个元素
  71. 5.2 快速反转数组
  72. 5.3 编写更灵活的StackTrace类
  73. 5.4 确定一个数据项在List<T>中出现的次数
  74. 5.5 检索List<T>中的特定数据项的所有实例
  75. 5.6 从数组中插入和删除数据项
  76. 5.7 保持List<T>有序
  77. 5.8 对Dictionary的键和/或值排序
  78. 5.9 创建具有最大值和最小值界限的Dictionary
  79. 5.10 在数组中存储列表的快照
  80. 5.11 维持应用程序会话之间的集合
  81. 5.12 测试Array或List<T>中的每个元素
  82. 5.13 对Array或List<T>中的每个元素执行一种操作
  83. 5.14 创建只读的Array或List<T>
  84. 第6章 迭代器、分部类型和分部方法
  85. 6.0 简介
  86. 6.1 在泛型类型上创建迭代器
  87. 6.2 在非泛型类型上创建迭代器
  88. 6.3 创建自定义的枚举器
  89. 6.4 实现迭代器逻辑
  90. 6.5 强制迭代器停止迭代
  91. 6.6 处理finally块和迭代器
  92. 6.7 在类中实现嵌套的foreach功能
  93. 6.8 组织接口实现
  94. 6.9 生成不再位于主代码路径中的代码
  95. 6.10 向生成的实体中添加挂钩
  96. 第7章 异常处理
  97. 7.0 简介
  98. 7.1 知道何时捕获和重新抛出异常
  99. 7.2 使用finally块时确保异常不会丢失
  100. 7.3 处理从通过反射调用的方法中抛出的异常
  101. 7.4 防止未处理的异常
  102. 7.5 获取异常信息
  103. 7.6 快速找到问题的根源
  104. 7.7 创建新的异常类型
  105. 7.8 获得栈记录
  106. 7.9 在第一次机会的异常上中断
  107. 7.10 处理从异步委托抛出的异常
  108. 7.11 利用Exception.Data给异常提供它们所需的额外信息
  109. 7.12 在WinForms应用程序中处理未处理的异常
  110. 7.13 处理Windows Presentation Foundation(WPF)
  111. 应用程序中未处理的异常
  112. 7.14 为常见错误分析异常
  113. 第8章 诊断
  114. 8.0 简介
  115. 8.1 对调试/跟踪输出提供细粒度的控制
  116. 8.2 确定进程是否停止了响应
  117. 8.3 在应用程序中使用事件日志
  118. 8.4 查找事件日志条目
  119. 8.5 监视事件日志中的特定条目
  120. 8.6 实现一个简单的性能计数器
  121. 8.7 启用和禁用复杂的跟踪代码
  122. 8.8 捕获进程的标准输出
  123. 8.9 为类创建自定义的调试显示
  124. 第9章 委托、事件和lambda表达式
  125. 9.0 简介
  126. 9.1 控制何时以及是否在多播委托中触发一个委托
  127. 9.2 从多播委托中的每个委托获得返回值
  128. 9.3 为多播委托中的每个委托单独处理异常
  129. 9.4 把同步委托调用转换成异步委托调用
  130. 9.5 一种高级接口查找机制
  131. 9.6 观察字典的添加和修改
  132. 9.7 使用lambda表达式
  133. 9.8 清晰地建立事件处理程序
  134. 9.9 在lambda表达式中使用不同的参数修饰符
  135. 9.10 在C#中使用闭包
  136. 9.11 使用函子对列表执行多种操作
  137. 第10章 正则表达式
  138. 10.0 简介
  139. 10.1 枚举匹配
  140. 10.2 从MatchCollection中提取组
  141. 10.3 验证正则表达式的语法
  142. 10.4 只快速查找字符串中的最后一个匹配
  143. 10.5 增强基本的字符串替换功能
  144. 10.6 实现更好的标记器
  145. 10.7 统计文本行数
  146. 10.8 返回在其中找到匹配的一整行内容
  147. 10.9 找到出现的特定匹配
  148. 10.10 使用常见的模式
  149. 第11章 数据结构与算法
  150. 11.0 简介
  151. 11.1 为一种数据类型生成散列代码
  152. 11.2 生成优先级队列
  153. 11.3 生成一对多映射(MultiMap)
  154. 11.4 生成一棵二叉查找树
  155. 11.5 生成一棵n叉树
  156. 11.6 使用HashSet对象
  157. 第12章 文件系统I/O
  158. 12.0 简介
  159. 12.1 操作文件属性
  160. 12.2 重命名文件
  161. 12.3 输出与平台无关的EOL字符
  162. 12.4 操作目录属性
  163. 12.5 重命名目录
  164. 12.6 使用通配符查找目录或文件
  165. 12.7 获取目录树
  166. 12.8 解析路径
  167. 12.9 解析环境变量中的路径
  168. 12.10 运行并与控制台工具交互
  169. 12.11 锁定文件的子段
  170. 12.12 等待文件系统中要发生的动作
  171. 12.13 比较两个可执行模块的版本信息
  172. 12.14 查询系统上所有驱动器的信息
  173. 12.15 压缩及解压缩文件
  174. 第13章 反射
  175. 13.0 简介
  176. 13.1 列出引用的程序集
  177. 13.2 列出导出的类型
  178. 13.3 找出重写方法
  179. 13.4 找出程序集中的成员
  180. 13.5 确定并获取程序集中的嵌套类型
  181. 13.6 显示类型的继承层次结构
  182. 13.7 找出类型的子类
  183. 13.8 找出程序集中所有可序列化的类型
  184. 13.9 动态调用成员
  185. 13.10 确定类型或方法是否是泛型
  186. 13.11 访问局部变量信息
  187. 13.12 生成泛型类型
  188. 第14章 Web
  189. 14.0 简介
  190. 14.1 将IP地址转换为主机名
  191. 14.2 将主机名转换为IP地址
  192. 14.3 解析URI
  193. 14.4 处理Web服务器错误
  194. 14.5 与Web服务器通信
  195. 14.6 通过代理服务器
  196. 14.7 从URL中获取HTML
  197. 14.8 使用Web浏览器控件
  198. 14.9 将数据库表与缓存绑定
  199. 14.10 通过编程预先构建一个ASP.NET网站
  200. 14.11 为Web对数据进行转义与取消转义
  201. 14.12 使用UriBuilder类
  202. 14.13 检查并修改Web应用程序配置
  203. 14.14 在用HTTP时使用缓存的结果以使性能更快
  204. 14.15 检测Web服务器的自定义错误页
  205. 第15章 XML
  206. 15.0 简介
  207. 15.1 以文档顺序读取并访问XML数据
  208. 15.2 读取Web上的XML
  209. 15.3 查询XML文档的内容
  210. 15.4 检验XML
  211. 15.5 通过编程生成XML文档
  212. 15.6 检测对XML文档的修改
  213. 15.7 处理XML字符串中的非法字符
  214. 15.8 XML的转换
  215. 15.9 分割XML文档
  216. 15.10 合并XML文档
  217. 15.11 不重载验证修改过的XML文件
  218. 15.12 扩展转换
  219. 15.13 从已有XML文件中成批获得用户的模式
  220. 15.14 向转换传递参数
  221. 第16章 联网
  222. 16.0 简介
  223. 16.1 编写一个TCP服务器端
  224. 16.2 编写一个TCP客户端
  225. 16.3 模拟表单执行
  226. 16.4 通过HTTP传送数据
  227. 16.5 使用命名管道进行通信
  228. 16.6 以编程方式发送Ping
  229. 16.7 使用SMTP服务发送SMTP邮件
  230. 16.8 使用套接字扫描机器的端口
  231. 16.9 使用当前的互联网连接设置
  232. 16.10 使用FTP传输文件
  233. 第17章 安全性
  234. 17.0 简介
  235. 17.1 控制对本地程序集中类型的访问
  236. 17.2 加密/解密字符串
  237. 17.3 加密和解密文件
  238. 17.4 清理密码信息
  239. 17.5 验证字符串保持未破坏的流传输
  240. 17.6 安全存储数据
  241. 17.7 保证安全断言的安全
  242. 17.8 验证程序集已经具备特定许可
  243. 17.9 最小化程序集的攻击面
  244. 17.10 获得安全/审计信息
  245. 17.11 授权/撤销对文件或注册表键的访问
  246. 17.12 使用安全字符串保护字符串数据
  247. 17.13 保护流数据
  248. 17.14 加密web.config信息
  249. 17.15 获得抛出SecurityException的完整理由
  250. 17.16 实现安全的Unicode编码
  251. 17.17 获得一个更安全的文件句柄
  252. 第18章 线程与同步
  253. 18.0 简介
  254. 18.1 创建每个线程的静态字段
  255. 18.2 向类成员提供线程安全的访问
  256. 18.3 防止沉默的线程终止
  257. 18.4 同步委托完成的通知
  258. 18.5 秘密存储特定线程的数据
  259. 18.6 使用信号量实现资源的多重访问
  260. 18.7 使用Mutex同步多个进程
  261. 18.8 使用事件协调线程
  262. 18.9 为事件获得命名权
  263. 18.10 在线程间执行原子操作
  264. 18.11 优化主读访问
  265. 第19章 工具箱
  266. 19.0 简介
  267. 19.1 处理操作系统关机、电源管理或用户会话修改
  268. 19.3 列出加载程序集的进程
  269. 19.4 使用本地工作站上的消息队列
  270. 19.5 找出当前框架版本的路径
  271. 19.6 确定全局程序集缓存(GAC)中注册的程序集版本
  272. 19.7 捕获标准输出流的输出
  273. 19.8 运行位于自己的AppDomain中的代码
  274. 19.9 确定操作系统和当前操作系统的服务包版本
  275. 第20章 数字与枚举
  276. 20.0 简介
  277. 20.1 度与弧度之间的转换
  278. 20.2 对各种数据类型使用按位求补运算符
  279. 20.3 将数字从某种基数转换为基数10
  280. 20.4 确定一个字符串是否是合法数字
  281. 20.5 舍入浮点值
  282. 20.6 选择一种舍入算法
  283. 20.7 温度计数法之间的转换
  284. 20.8 安全地执行收缩数字强制转换
  285. 20.9 将一个枚举值显示为字符串
  286. 20.10 将纯文本转换为等价的枚举值
  287. 20.11 测试合法的枚举值
  288. 20.12 测试合法的标志枚举
  289. 20.13 使用位掩码中的枚举成员
  290. 20.14 确定一个或多个枚举标志是否被设置
  291. 20.15 确定Decimal或Double数字的整数部分
书名:C# 3.0 Cookbook中文版(第3版)
译者:陈宗斌 等译
国内出版社:清华大学出版社
出版时间:2008年12月
页数:702
书号:978-7-302-18109-5
原版书出版商:O'Reilly Media
Jay Hilyard
 
Jay Hilyard已经有12年多开发Windows应用的经验,开发.NET应用也有4年多了。Jay在《MSDN Magazine》上发表过多篇文章,目前在Newmarket International(位于Portsmouth, NH)的新产品开发小组(New Product Development)工作。他主要致力于.NET的研究,除此之外,Jay会与他的家人共享闲暇时光,再就是研究家谱。
Jay Hilyard开发Windows应用程序的时间超过了15年,其中有7年多的时间在开发.NET应用程序。他在MSDN Magazine中发表了众多文章,他目前在位于美国新罕布什尔州朴次茅斯市的Newmarket International的New Product团队工作。
 
 
Stephen Teilhet
 
Stephen Teilhet获得过电子工程专业的学位,但是很快就开始编写Windows平台的软件。在过去的11年里,他曾为多家咨询公司效力,参加过大量项目,从事过Visual Basic、Visual C++、MTS、COM、MSMQ和SQL Server的工作。目前Stephen在Nashua, NH的Compuware Numega Labs任职,在这里他参与过多项获奖产品的开发,包括DevPartner CodeReview和最近的DevPartner SecurityChecker。
Stephen Teilhet自从Microsoft开发了.NET 1.0 Framework预发行版本以来,就一直在使用.NET平台。目前,他为Ounce Labs工作,增强它们的静态安全代码分析工具,用以找出多种语言(包括C#和Visual Basic)中的漏洞。
 
 
本书封面上的动物是一只束带蛇。之所以这样命名,是因为它们的纵向条纹类似于曾用于支撑人类袜子的吊袜带,可以通过它们与众不同的条纹轻松地识别束带蛇:后背中间有一条窄条纹,它两边各有一条宽条纹。颜色和图案变化使它们能够混入天然环境中,帮助它们躲避食肉动物。它们是北美洲最常见的蛇,并且是阿拉斯加州唯一的蛇类。
束带蛇具有棱鳞 —— 沿着鳞中轴的一条或多条脊,这使得它们具有粗糙的组织和暗淡的外表。成年束带蛇的长度一般在46~130厘米(1.5英尺到4英尺以上)之间。雌性束带蛇通常比雄性束带蛇大一些,尾巴要短一些,并且在躯干和尾巴的结合部有一个凸出部分。
雌性束带蛇是卵胎生的,这意味着它们在软蛋中生育“有生命的”幼崽。在分娩时,大多数软蛋和粘膜都会破裂,这使得它们生育的孩子看上去是有生命的。偶尔,新生的幼崽仍会在其软壳内。雌性束带蛇通常会生育10~40只幼崽:束带蛇的最高记录是生育了98只活的幼崽。一旦从母体生育出来,幼蛇就完全独立并且必须开始自谋生路。在这段时间,它们极容易学会以捕食其他动物为生的方法,并且超过半数的幼蛇会在一岁前死亡。
束带蛇是能够吃蟾蜍、蝾螈以及其他具有强大防化能力的两栖动物的少数几种动物之一。尽管它们通常所吃的食物因环境而异,束带蛇通常会吃蚯蚓和两栖动物;不过,它们偶尔也会吃幼鸟、鱼和较小的啮齿动物。束带蛇的唾液有毒(对人类无害),束带蛇在完全吞食猎物之前,将会使用其唾液使猎物昏厥或杀死它们。