2011-01-06 78 views
6

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

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

感谢

回答

3

Dictionarybase是实现非通用IDictionary接口的基类,而Dictionary是实现通用IDictionary接口的字典的通用版本。泛型的使用优于非泛型。

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

使用泛型集合一般建议,因为你获得 类型安全的直接的好处,而不必从 基地集合类型派生并实现类型特定成员。当集合元素 是值类型时,通用 集合类型的性能通常也会高于相应的非通用集合类型(并且优于从非泛型基本集合类型导出 的类型),因为对于泛型,不需要将 元素。

而且经过,Introduction to Generics

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

+0

这两个类都强类型..也从接口派生。除了DictionaryBase的System.Collections中的所有类,我猜不是类型特定的!所以,区别仅在于它们来自不同的接口并且DictionaryBase是一个抽象类。 – Batrickparry 2011-01-06 11:20:25

+0

不应该将非泛型类中的泛型类的对应物设置为Obsolete then !!!!! – Batrickparry 2011-01-06 11:26:42

+0

泛型IDictionary是非泛型IDictionary的泛型版本。泛型提升了类型的安全性和效率。 – 2011-01-06 11:51:21

5

究其原因,非泛型集合类型仍然是在.NET框架主要是为了向下兼容。通常你应该尽可能使用泛型集合类型。

+1

因此,由于存在通用字典,因此没有实际使用DictionaryBase! – Batrickparry 2011-01-06 11:12:58

+0

实际上,是的。 – 2011-01-06 11:16:52

+0

感谢亚当.. :) – Batrickparry 2011-01-06 11:24:37

0

我只是完成转换旧DictionaryBase类是IXmlSerializable到 新的泛型集合类通用Dictionary(string, string)

最痛苦的区别是,对于通用Dictionary<string, string>,当我呼叫this[key]找到一个不存在的密钥时,我得到一个异常,说明该密钥不存在。

DictionaryBase我找回null毫无例外。这对我来说很痛苦,因为系统中充满了代码,在尝试获取密钥值之前没有检查字典ContainsKey。假设我在序列化过程中搞砸了某些东西,我感到更加痛苦。

相关问题