C#3.0 Cookbook(中文版)
分類: 图书,计算机/网络,程序设计,C C++ C# VC VC++,
作者: (美)希尔雅德(Hilyard,J.),(美)特尔赫特(Teilhet,S.)著,陈宗斌等译
出 版 社: 清华大学出版社
出版时间: 2008-12-1字数: 1063000版次: 1页数: 699印刷时间: 2008/12/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787302181095包装: 平装编辑推荐
你将找到用于以下方面的秘诀:
你还将发现其他一些秘诀,它们用于加密和解密、控制对类型的访问、安全地存储数据、使用编程性
安全和声明性安全等。所有的解决方案都是使用Visual Studi0.NET 2008开发的。
本书的补充资源是一个公共共建性网站,它包括C#2.0秘诀的以前版本,C#3.0版本没有修改它们。
内容简介
当你在使用C#3.0的过程中陷入困境而需要快速找到解决方案时,为什么要辛苦地读完一本教程呢?这本最畅销书现在提供了超过250个代码秘诀,针对的是C#程序员面临的常见和不那么常见的问题。本书添加了许多新秘诀,从以前版本继承来的大多数秘诀都经过了修订,以便帮助你利用C#3.0和.NET 3.5平台提供的能力——以及克服它们提出的挑战。本书用一整章的篇幅介绍了用于LINQ(语言级集成查询)的秘诀,并用额外两章介绍了使用扩展方法的秘诀,还介绍了lambda表达式、对象和集合初始化器、新的同步原语以及LINQ to XML等。本书中的每个秘诀都提供了对单个问题的解决方案,讨论了它为什么会工作,并且提供了查找额外信息的
资源。
目录
前言
第1章语言级集成查询(KINQ)
1.0 简介
1.1 查询消息队列
1.2 使用带有数据的集合语义
1.3利用LINQ to SQL重用参数化查询
1.4以一种文化敏感的方式对结果排序
1.5 添加用于LINQ的功能扩展
1.6 跨数据库执行查询和连接
1.7 利用LINQ查询配置文件
1.8 直接从数据库创建XML文件
1.9 有选择地输出查询结果
1.10 结合使用LINQ与不支持IEnumerable的集合
第2章字符串和字符
2.0 简介
2.1 确定char包含的字符种类
2.2在比较两个字符时控制大小写敏感性
2.3在一个字符串内寻找另一个字符串出现的所有位置
2.4在比较两个字符串时控制大小写敏感性
2.5把一个字符串与另~个字符串的头部或尾部作比较
2.6插入文本到字符串中
2.7删除或替换字符串内的字符
2.8把二进制数据编码为base64格式
2.9 解码base64编码的二进制数据
2.10 把作为byte[]返回的字符串转换为字符串
2.11 把字符串传递给只接受byte[]的方法
2.12 把字符串转换为其他类型
2.13 创建定界字符串
2.14 从定界字符串中提取数据项
2.15 遍历字符串中的每个字符
2.16 从字符串的头部和/或尾部删除字符
2.17 测试字符串是否为null或者长度为O
2.18 追加行
第3章类和结构
3.0简介
3.1创建联合类型的结构
3.2 使类型可排序
3.3 使类型可检索
3.4间接重载+=、-=、/=和×=运算符
3.5间接重载&&、II和?:运算符
3.6 创建无错的表达式
3.7 简化布尔逻辑
3.8以程序设计语言无关的方式在简单类型之间转换
3.9确定何时使用强制转换运算符、as运算符或is运算符
3.10 利用as运算符进行强制转换
3.1 1 利用is运算符确定变量的类型
3.12 从一个方法返回多个数据项
3.13 解析命令行参数
3.14 在运行时初始化常量字段
3.15 构建可复制的类
3.16 确保处理对象
3.17 处理非托管资源
3.18 确定装箱和拆箱的位置
第4章泛型
4.0简介
4.1确定使用泛型的时间和位置
4.2 理解泛型类型
4.3利用对应的泛型替换ArrayList
4.4 用对应的泛型替换Stack和Queue
4.5使用链表
4.6创建可以初始化为null的值类型
4.7反转有序链表中的内容
4.8以泛型方式创建只读集合
4.9 利用对应的泛型替换Hashtable
4.10 对泛型Dictionary类型使用foreach
4.11 约束类型参数
4.12 将泛型变量初始化为它们的默认值
第5章集合
5.0简介
5.1交换数组中的两个元素
5.2 快速反转数组
5.3编写更灵活的StackTrace类
5.4确定一个数据项在List中出现的次数
5.5检索List中的特定数据项的所有实例
5.6 从数组中插入和删除数据项
5.7 保持List有序
5.8 对Dictionary的键和/或值排序
5.9创建具有最大值和最小值界限的Dictionary
5.10 在数组中存储列表的快照
5.11 维持应用程序会话之间的集合
5.12 测试Array或List中的每个元素
5.13 对Array或List中的每个元素执行一种操作
5.14 创建只读的Array或List
第6章迭代器、分部类型和分部方法
6.0 简介
6.1在泛型类型上创建迭代器
6.2 在非泛型类型上创建迭代器
6.3 创建自定义的枚举器
6.4 实现迭代器逻辑
6.5 强制迭代器停止迭代
6.6 处理finally块和迭代器
6.7 在类中实现嵌套的foreach功能
6.8 组织接口实现
6.9 生成不再位于主代码路径中的代码
6.10 向生成的实体中添加挂钩
第7章异常处理
7.0 简介
7.1知道何时捕获和重新抛出异常,
7.2使用finally块时确保异常不会丢失
7.3处理从通过反射调用的方法中抛出的异常
7.4 防止未处理的异常
7.5 获取异常信息
7.6 快速找到问题的根源
7.7 创建新的异常类型
7.8获得栈记录
7.9 在第一次机会的异常上中断
7.10 处理从异步委托抛出的异常
7.11 利用Exception.Data给异常提供它们所需的额外信息
7.12 在WinForms应用程序中处理未处理的异常
7.13 处理Windows Presentation Foundation(WPF)应用程序中未处理的异常
7.14 为常见错误分析异常
第8章诊断
8.0简介
8.1对调试/跟踪输出提供细粒度的控制
8.2确定进程是否停止了响应
8.3 在应用程序中使用事件日志
8.4 查找事件日志条目
8.5监视事件日志中的特定条目
8.6实现一个简单的性能计数器
8.7启用和禁用复杂的跟踪代码
8.8捕获进程的标准输出
8.9为类创建自定义的调试显示
第9章委托、事件和lambda表达式
9.0简介
9.1控制何时以及是否在多播委托中触发一个委托
9.2 从多播委托中的每个委托获得返回值
9.3为多播委托中的每个委托单独处理异常
9.4把同步委托调用转换成异步委托调用
9.5一种高级接口查找机制
9.6 观察字典的添加和修改
9.7 使用larnbda表达式
9.8 清晰地建立事件处理程序
9.9 在lambda表达式中使用不同的参数修饰符
9.10 在C≠}中使用闭包
9.11 使用函子对列表执行多种操作
第10章正则表达式
10.0 简介
10.1 枚举匹配
10.2 从MatchCollection中提取组
10.3 验证正则表达式的语法
10.4 只快速查找字符串中的最后一个匹配
10.5 增强基本的字符串替换功能
10.6 实现更好的标记器
10.7 统计文本行数
10.8 返回在其中找到匹配的一整行内容
10.9 找到出现的特定匹配
10.10使用常见的模式
第11章数据结构与算法
11.0 简介
11.1 为一种数据类型生成散列代码
11.2 生成优先级队列
11.3 生成一对多映射(MultiMap)
11.4 生成一棵二叉查找树
11.5 生成一棵n叉树
11.6 使用HashSet对象
第12章文件系统I/O
12.0 简介
12.1 操作文件属性
12.2 重命名文件
12.3 输出与平台无关的EOL字符
12.4操作目录属性
12.5 重命名目录
12.6 使用通配符查找目录或文件
12.7 获取目录树
12.8 解析路径
12.9 解析环境变量中的路径
12.10运行并与控制台工具交互
12.11锁定文件的子段
12.12等待文件系统中要发生的动作
12.13 比较两个可执行模块的版本信息
12.14查询系统上所有驱动器的信息
12.15压缩及解压缩文件
第13章反射
13.0 简介
13.1 列出引用的程序集
13.2 列出导出的类型
13.3 找出重写方法
13.4 找出程序集中的成员
13.5 确定并获取程序集中的嵌套类型
13.6 显示类型的继承层次结构
13.7 找出类型的子类
13.8 找出程序集中所有可序列化的类型
13.9 动态调用成员
13.10确定类型或方法是否是泛型
13.11访问局部变量信息
13.12生成泛型类型
第1 4章Web
14.0 简介
14.1 将IP地址转换为主机名
14.2 将主机名转换为IP地址
14.3 解析URl
14.4 处理Web服务器错误
14.5 与Web服务器通信
14.6 通过代理服务器
14.7 从URL中获取HTML
14.8 使用Web浏览器控件
14.9 将数据库表与缓存绑定
14.10通过编程预先构建一个ASP.NET网站
14.11 为Web对数据进行转义与取消转义
14.1 2使用UriBuilder类
14.13检查并修改Web应用程序配置
14.14在用HTTP时使用缓存的结果以使性能更快
14.15检测Web服务器的自定义错误页
第15章XML
15.0 简介
15.1 以文档顺序读取并访问XML数据
15.2 读取Web上的XML
15.3 查询XML文档的内容
15.4 检验XML
15.5 通过编程生成XML文档
15.6 检测对XML文档的修改
15.7 处理XML字符串中的非法字符
15.8 XML的转换
15.9 分割XML文档
15.10合并XML文档
15.11不重载验证修改过的XML文件
15.12扩展转换
15.13从已有XML文件中成批获得用户的模式
15.14向转换传递参数
第16章联网
16.0 简介
16.1 编写一个TCP服务器端
16.2 编写一个TCP客户端
16.3 模拟表单执行
16.4 通过HTTP传送数据
16.5 使用命名管道进行通信
16.6 以编程方式发送Pin9
16.7 使用SMTP服务发送SMTP邮件
16.8 使用套接字扫描机器的端口
16.9 使用当前的互联网连接设置
16.10使用FTP传输文件
第17章安全性
17.0 简介
17.1 控制对本地程序集中类型的访问
17.2 加密/解密字符串
17.3 加密和解密文件
17.4 清理密码信息
17.5 验证字符串保持未破坏的流传输
17.6 安全存储数据
17.7 保证安全断言的安全
17.8 验证程序集已经具备特定许可
17.9 最小化程序集的攻击面
17.10获得安全/审计信息
17.11 授权/撤销对文件或注册表键的访问
17.12使用安全字符串保护字符串数据
17.13保护流数据
17.14加密web.config信息
17.15 获得抛出SecurityException的完整理由
17.16实现安全的Unicode编码
17.17获得一个更安全的文件句柄
第18章线程与同步
18.0 简介
18.1 创建每个线程的静态字段
18.2 向类成员提供线程安全的访问
18.3 防止沉默的线程终止
18.4 同步委托完成的通知
18.5 秘密存储特定线程的数据
18.6 使用信号量实现资源的多重访问
18.7 使用Mutex同步多个进程
18.8 使用事件协调线程
18.9 为事件获得命名权
18.10在线程间执行原子操作
18.11优化主读访问
第19章工具箱
19.0 简介
19.1 处理操作系统关机、电源管理或用户会话修改
19.3 列出加载程序集的进程
19.4 使用本地工作站上的消息队列
19.5 找出当前框架版本的路径
19.6 确定全局程序集缓存(GAC)中注册的程序集版本
19.7 捕获标准输出流的输出
19.8 运行位于自己的AppDomain中的代码
19.9 确定操作系统和当前操作系统的服务包版本
第20章数字与枚举
20.0 简介
20.1 度与弧度之间的转换
20.2 对各种数据类型使用按位求补运算符
20.3 将数字从某种基数转换为基数10
20.4 确定一个字符串是否是合法数字
20.5 舍入浮点值
20.6 选择一种舍入算法
20.7 温度计数法之间的转换
20.8 安全地执行收缩数字强制转换
20.9 将一个枚举值显示为字符串
20.10将纯文本转换为等价的枚举值
20.11测试合法的枚举值
20.12测试合法的标志枚举
20.13使用位掩码中的枚举成员
20.14确定一个或多个枚举标志是否被设置
20.15确定Decimal或Double数字的整数部分
书摘插图
第1章语言级集成查询(LINQ)
1.0 简介
语言级集成查询(Language Integrated Query,LINQ)是访问许多不同源数据的新方式。
LINQ提供了一种可以在单个查询中独立或者同时操作不同数据域的查询模型。LINQ给.NET语言引入了查询数据的能力,并且其中一些语言已经提供了扩展使得甚至可以更直观地使用它。其中一种语言就是C#,在C#3.0中有许多对语言的扩展,它们有助于以一种功能丰富、直观的方式为查询提供便利。
传统的面向对象程序设计基于一种强制性的风格,其中开发人员不仅要详细描述他们希望发生什么事情,而且要描述关于应该如何通过代码执行该任务的绝大多数细节。LINQ有助于使代码更具说明性,从而便于开发人员描述他们想要做什么,而不用详述如何达到目标。LINQ还支持更实用的编程风格。这些变化可以显著减少执行某些任务所需的代码量。也就是说,面向对象程序设计在c#和.NET中仍然具有强大的生命力,但是c#语言第一次提供了一种机会,让你依据自己的需要选择编程风格。不过,注意:LINQ并不是对各种情况都适用,也不能代替良好的设计或实践。你可能使用LINQ编写出糟糕的代码,就像你可能编写糟糕的面向对象或过程式代码一样。其一贯的难点在于搞清楚什么时候适合使用哪种技术。
LINQ的初始版本包含许多数据域,如下所示:
•LINQ to 0bjects
•LINQ to XML
•LINQ to AD0.NET
•LINQ to SQL|LINQ to DataSetLINQ to Entities
目前正在开发许多其他的“LINQ t0”实现,但是Microsoft最初就提供了这些。
……