DictionaryBase和Dictionary之间的区别<tkey,tvalue> </tkey,tvalue>

时间:2011-01-06 11:07:02

标签: c# .net collections

任何人都可以告诉我DictionaryBase和通用Dictionary<TKey, TValue>之间的区别,除了DictionaryBase是一个抽象类!它们都是强类型的,我在某处读到泛型类在性能上优于非泛型类,应该是首选,那么DictionaryBase的确切用法是什么呢? 这两个课程几乎相同!

任何形式的帮助将不胜感激

由于

3 个答案:

答案 0 :(得分:5)

非泛型集合类型仍然在.NET框架中的原因主要是为了向后兼容。通常,您应尽可能使用通用集合类型。

答案 1 :(得分:3)

Dictionarybase是实现非通用IDictionary接口的基类,而Dictionary是实现通用IDictionary接口的字典的通用版本。使用仿制药比非仿制药更受欢迎。

我认为这会更有帮助When to use generics?

  

通常建议使用通用集合,因为您获益   类型安全的直接好处,而不必从一个   基本集合类型和实现特定于类型的成员。通用   集合类型通常也比相应的表现更好   非泛型集合类型(并且比派生的类型更好   来自非泛型基本集合类型)时的集合元素   是值类型,因为泛型不需要包装   元件。

同时浏览Introduction to Generics

  

通用类和方法结合了可重用性,类型安全性和   以非通用对手方式无法实现的效率。   泛型最常用于集合和方法   对他们进行操作。 .NET Framework类库的2.0版   提供了一个新的命名空间System.Collections.Generic,其中包含   几个新的基于泛型的集合类。建议这样做   所有针对.NET Framework 2.0及更高版本的应用程序都使用   新的泛型集合类而不是旧的非泛型   同行

答案 2 :(得分:0)

我刚刚将DictionaryBase的{​​{1}}类转换为通用IXmlSerializable

最痛苦的区别在于,对于通用Dictionary(string, string),当我为不存在的密钥调用Dictionary<string, string>时,我得到一个异常,说明该密钥不存在。

this[key]上我毫无例外地回来DictionaryBase。这在我的案例中很痛苦,因为在尝试获取键值之前,系统中没有检查字典null的代码。假设我把序列化搞砸了,我觉得更痛苦。