技术积累

明日复明日,明日何其多,我生待明日,万事成蹉跎。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.NET 2.0泛型集合类与.NET 1.1集合类的区别(二)

Posted on 2005-08-28 23:11  追风逐云.NET  阅读(561)  评论(0编辑  收藏  举报
3、接口
在接口方面改动最大的ICollection<T>,在1.1中,ICollection是一个只读的版本,并没有任何方法可以让你修改集合中的数据,但在泛型的ICollection<T>中增加了修改数据的方法和IsReadOnly属性,我很遗憾没有找到泛型化的只读版本的ICollection。

ICollection<T>虽然可以修改数据,但他缺乏索引功能的支持,所以又定义了IList<T>接口,他继承自ICollection<T>并提供用数字检索的功能。

在与老版本的集合接口兼容性方面,IEnumerable<T>支持IEnumerable,ICollection<T>不支持ICollection,IList<T>也不支持IList。

 

System.Collections.Generic.IDictionary<TKey, TValue>与旧版本的字典并没有太大的区别,在接口的继承层次上,原先的IDictionary继承自ICollection,现在仍然是对应的泛型版本ICollection<T>,但因为ICollection<T>增加了修改数据的功能,这就带来了一定的麻烦,因为字典要求Add方法传入Key和Value俩个参数,而ICollection的Add只能有一个参数,所以在ICollection<T>中限制为:ICollection<KeyValuePair<TKey,TValue>>,以提供俩个参数。

字典接口还新增加了TryGetValue(TKey, TValue),这个方法主要是为提高性能而设立,原先如果你想安全的获取某个键位时,必须使用ContainsKey(TKey)先检索是否存在,然后用This检索,这样就有俩次检索的过程,现在的TryGetValue将只用检索一次。