- 浏览: 2111656 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1878)
- [网站分类]ASP.NET (141)
- [网站分类]C# (80)
- [随笔分类]NET知识库 (80)
- [随笔分类]摘抄文字[非技术] (3)
- [随笔分类]养生保健 (4)
- [网站分类]读书区 (16)
- [随笔分类]赚钱 (7)
- [网站分类].NET新手区 (233)
- [随笔分类]网站 (75)
- [网站分类]企业信息化其他 (4)
- [网站分类]首页候选区 (34)
- [网站分类]转载区 (12)
- [网站分类]SQL Server (16)
- [网站分类]程序人生 (7)
- [网站分类]WinForm (2)
- [随笔分类]错误集 (12)
- [网站分类]JavaScript (3)
- [随笔分类]小说九鼎记 (69)
- [随笔分类]技术文章 (15)
- [网站分类]求职面试 (3)
- [网站分类]其他技术区 (6)
- [网站分类]非技术区 (10)
- [发布至博客园首页] (5)
- [网站分类]jQuery (6)
- [网站分类].NET精华区 (6)
- [网站分类]Html/Css (10)
- [随笔分类]加速及SEO (10)
- [网站分类]Google开发 (4)
- [随笔分类]旅游备注 (2)
- [网站分类]架构设计 (3)
- [网站分类]Linux (23)
- [随笔分类]重要注册 (3)
- [随笔分类]Linux+PHP (10)
- [网站分类]PHP (11)
- [网站分类]VS2010 (2)
- [网站分类]CLR (1)
- [网站分类]C++ (1)
- [网站分类]ASP.NET MVC (2)
- [网站分类]项目与团队管理 (1)
- [随笔分类]个人总结 (1)
- [随笔分类]问题集 (3)
- [网站分类]代码与软件发布 (1)
- [网站分类]Android开发 (1)
- [网站分类]MySQL (1)
- [网站分类]开源研究 (6)
- ddd (0)
- 好久没写blog了 (0)
- sqlserver (2)
最新评论
-
JamesLiuX:
博主,能组个队么,我是Freelancer新手。
Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出? -
yw10260609:
我认为在混淆前,最好把相关代码备份一下比较好,不然项目完成后, ...
DotFuscator 小记 -
日月葬花魂:
大哥 能 加我个QQ 交流一下嘛 ?51264722 我Q ...
web应用程序和Web网站区别 -
iaimg:
我想问下嵌入delphi写的程序总是出现窗体后面感觉有个主窗体 ...
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部 -
iaimg:
代码地址下不了啊!
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
- 摘要:《C#3.0cookbook中文版》《C#3.0cookbook中文版》本书侧重于解决C#程序员在开发应用程序时遇到的各类问题,并以此组织全书内容。这些解决方案称为秘诀;每个秘诀都包含一个问题,他的解决方案及相关信息的讨论。 本节为大家介绍的是利用对应的泛型替换Hashtable。
- 标签:泛型 C#3.0 0cookbook C#3.0cookbook中文版
- <script src="http://www.51cto.com/js/article/keywords_ad.js"></script>
4.9 利用对应的泛型替换Hashtable
问题
你希望通过用其泛型版本替换所有的Hashtable对象来增强应用程序的性能,并使得代码更容易处理。
解决方案
利用类型安全的泛型类System.Collections.Generic.Dictionary替换出现的所有System.Collections.Hashtable类。
下面给出了一个使用System.Collections.Hashtable对象的简单示例:
public static void UseNonGenericHashtable() |
public static void UseGenericDictionary() |
讨论
对于应用程序中Hashtable的简单实现,这种替换应该相当容易。不过,有一些事情要注意。例如,泛型类Dictionary没有实现ICloneable接口,而Hashtable类则实现了该接口。
表4-3显示了两个类中同时实现的等价成员。
表4-3:Hashtable和泛型类Dictionary中的等价成员
Hashtable类中的成员 | 泛型类Dictionary中的等价成员 |
无 | Comparer属性 |
Count属性 | Count属性 |
IsFixedSize属性 | ((IDictionary)myDict).IsFixedSize |
IsReadOnly属性 | ((IDictionary)myDict).IsReadOnly |
IsSynchronized属性 | ((IDictionary)myDict).IsSynchronized |
Item属性 | Item属性 |
Keys属性 | Keys属性 |
SyncRoot属性 | ((IDictionary)myDict).SyncRoot |
Values属性 | Values属性 |
Add方法 | Add方法 |
Clear方法 | Clear方法 |
Clone方法 | 使用重载的构造函数,它接受一个IDictionary<T,U>类型 |
Contains方法 | ContainsKey方法 |
ContainsKey方法 | ContainsKey方法 |
ContainsValue方法 | ContainsValue方法 |
CopyTo方法 | ((ICollection)myDict).CopyTo(arr,0) |
表4-3:Hashtable和泛型类Dictionary中的等价成员(续)
Hashtable类中的成员 | 泛型类Dictionary中的等价成员 |
Remove方法 | Remove方法 |
Synchronized静态方法 | lock(myDictionary.SyncRoot) {...} |
无 | TryGetValue方法 |
Dictionary<int, string> numbers = new Dictionary<int, string>(); |
注意: 由于没有代码能够返回泛型Dictionary的同步版本,IsSynchronized属性将总是返回false。SyncRoot属性将总是返回调用它的相同对象。实质上,这个属性返回this指针。Microsoft决定取消从任何泛型集合类创建同步包装器的能力。
作为替代,他们建议使用lock关键字来锁定整个集合或者适合你的需要的另一类同步对象。
由于泛型类Dictionary中也缺失Clone方法(这是由于这个类没有实现ICloneable接口),可以代之以使用重载的构造函数,它接受一个IDictionary<T,U>类型:
// Create and populate a Dictionary |
// Create and populate a Dictionary |
// Create and populate a Dictionary |
对Dictionary对象调用CopyTo方法涉及建立一个KeyValuePair<T,U>对象的数组,在调用CopyTo方法之后,该数组最终将用于保存Dictionary对象内的所有KeyValuePair<T,U>对象。接下来,将Dictionary对象numbers强制转换成IDictionary类型,以便可以调用CopyTo方法。一旦调用了CopyTo方法,objs数组将包含原始numbers对象中的所有KeyValuePair<T,U>对象的副本。注意:使用foreach循环以与numbers对象相同的方式迭代objs数组。
参考
MSDN文档中的"System.Collections.Hashtable类"和"System.Collections.Generic. Dictionary类"主题。
发表评论
-
美橙互联域名与其他地方的区别
2010-04-23 09:09 992因为买域名 ,搜索 了一下各个服务商,的差别,发下以下不同 ... -
淘宝自动发货申请资格
2010-04-11 12:58 1202标准: 1、非消保卖家 ... -
IMAX [生活时尚]
2010-01-06 09:26 1035目录[隐藏] 【IMAX是什么】 【技术标准】 ... -
CNNIC公告称半个月已处理不良网站域名万例
2010-01-07 19:04 100112月29日上午消息,中国 ... -
无线联网常见问题[1]-搜不到无线网络(请先耐心看完)
2010-01-08 09:33 6785查看文章 ... -
上海市社会保险费缴费标准
2010-01-14 23:31 1085上海市社会保险费缴费标准 项目 对象 ... -
[转+总结]Linux虚拟系统安装VMware Tools总结
2010-03-03 09:20 1169[转+总结]Linux虚拟系统安装VMware Tools总结 ... -
今天用充QQ币的时候,发现选择网银的时候,竟然会跳出一个错误
2010-03-14 11:01 901... -
[转+总结]Linux虚拟系统安装VMware Tools总结
2010-03-03 09:20 1572[转+总结]Linux虚拟系统安装VMware Tools总结 ... -
今天用充QQ币的时候,发现选择网银的时候,竟然会跳出一个错误
2010-03-14 11:01 1019... -
[转+总结]Linux虚拟系统安装VMware Tools总结
2010-03-03 09:20 1388[转+总结]Linux虚拟系统安装VMware Tools总结 ... -
上海市社会保险费缴费标准
2010-01-14 23:31 1054上海市社会保险费缴费标准 项目 对象 ... -
上海市社会保险费缴费标准
2010-01-14 23:31 1125上海市社会保险费缴费标准 项目 对象 ... -
4.9 利用对应的泛型替换Hashtable[转]
2009-12-29 10:51 913摘要:《C#3.0cookbook中文版》 ... -
IMAX [生活时尚]
2010-01-06 09:26 1041目录[隐藏] 【IMAX是什么】 【技术标准】 ...
相关推荐
java Hashtable的泛型化 java Hashtable的泛型化 java Hashtable的泛型化
C# 工具类 泛型转JSON 使用 Newtonsoft.Json 转换JSON
简单介绍 里氏替换原则 简单工程模式 实现任意排序 使用了 is 和 as 方法 ArrayList数组 与 List泛型集合 Hashtable数组 与 Dictionary,v>泛型集合 的基本使用 序列化 将数据存储
C#【泛型】实现的【通用】结构体转字节数组,包含网上收集的网页参考资料、非通用的【StructTest】工程、泛型实现的通用【Struct2BytesGenericType】工程。 VS2010编译运行。
json字符串转化为list泛型的源码demo,项目中包括需要运行的jsonjar包
通过抽象工厂模式访问两种数据库 SQL 和Access 利用泛型读取表中数据 WCF发布出去
利用泛型解析xml文件 自带xml文件
反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool<Point> pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象 ... pool.put(p); 希望能帮助那些为查找泛型构造器、...
根据不同类型枚举,set等进行泛型转换,有赋值转换,也有传参转换,大多数都是底层方法描述,可运行
泛型类、泛型方法、泛型接口、泛型委托 泛型类、泛型方法、泛型接口、泛型委托
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
泛型工具类,用于dao的超类,获取实体类的类型。
Java中的泛型,在运行时刻其具体类型是被擦除的,这样我们就不能用new T(),instanceof等关操作,特别是对泛型类型的类的实例化问题,在此根据《Thinking in Java》中所讲的对类型擦除所带来问题的三种解决方案,比较...
C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型
DataReader反射泛型实体对象。数据库已有。完整的例子。
《基于C#编程建立泛型Vector数据类型及对应处理方法.docx》 详细介绍了Vector; 《Vector.cs》 是本博客的核心代码,编写了Vector类及其相关的方法; 《Program.cs》 是本博客中调用Vector类的代码,也是用来验证...
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照
C#的泛型C#的泛型