DictionaryBase和Dictionary<Tkey,Tvalue>的区别

7
有人能告诉我除了DictionaryBase是抽象类之外,它和通用的Dictionary<TKey, TValue>有什么区别吗?它们两个都是强类型的,我在某个地方读到说泛型类在性能上比非泛型类更好,并且应该优先使用,那么DictionaryBase的确切用途是什么呢?这两个类几乎相同!任何帮助都将不胜感激。谢谢。
3个回答

5

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


1
所以,由于存在通用字典,实际上没有使用DictionaryBase的用处!! - Batrickparry

3

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

我认为这将更有帮助 何时使用泛型?

使用泛型集合是一种通常推荐的做法,因为您可以立即获得类型安全的好处,而无需从基本集合类型派生并实现特定于类型的成员。当集合元素是值类型时,泛型集合类型通常比相应的非泛型集合类型(以及派生自非泛型基本集合类型的类型)执行得更好,因为使用泛型时不需要将元素装箱。此外,请查看Introduction to Generics
泛型类和方法以一种非泛型对应物所不能做到的方式结合了可重用性、类型安全性和效率。泛型最常用于集合及其上面操作的方法。.NET Framework类库的2.0版本提供了一个新的命名空间System.Collections.Generic,其中包含几个新的基于泛型的集合类。建议所有针对.NET Framework 2.0及更高版本的应用程序使用新的泛型集合类,而不是旧的非泛型对应物。

这两个类都是强类型的,并且也派生自接口。除了 DictionaryBase,我猜 System.Collections 中的所有类都不是类型特定的!因此,它们之间的区别仅在于它们派生自不同的接口,而 DictionaryBase 是一个抽象类。 - Batrickparry
非泛型类中的泛型类对应项难道不应该被标记为过时吗?!!! - Batrickparry
通用的IDictionary是非泛型IDictionary的泛型版本。泛型可以提高类型安全性和效率。 - Devendra D. Chavan

1
我刚刚完成了一个旧的DictionaryBase类,该类是IXmlSerializable转换为泛型Dictionary(string, string)
最痛苦的区别在于对于泛型Dictionary<string, string>,当我调用不存在的键时,会抛出一个指示该键不存在的异常。
DictionaryBase上,我得到了null而没有异常。这在我的情况下很痛苦,因为系统中充满了没有检查字典ContainsKey的代码,然后尝试获取键值。这让我更加痛苦,因为我认为我弄乱了序列化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接