【发布时间】:2011-01-06 11:07:01
【问题描述】:
谁能告诉我DictionaryBase 和通用Dictionary<TKey, TValue> 之间的区别,除了DictionaryBase 是一个抽象类!它们都是强类型的,我在某处读到泛型类在性能上优于非泛型类,应该是首选,那么DictionaryBase 的确切用途是什么?
两个类几乎一样!
任何形式的帮助将不胜感激
谢谢
【问题讨论】:
标签: c# .net collections
谁能告诉我DictionaryBase 和通用Dictionary<TKey, TValue> 之间的区别,除了DictionaryBase 是一个抽象类!它们都是强类型的,我在某处读到泛型类在性能上优于非泛型类,应该是首选,那么DictionaryBase 的确切用途是什么?
两个类几乎一样!
任何形式的帮助将不胜感激
谢谢
【问题讨论】:
标签: c# .net collections
非泛型集合类型仍在 .NET 框架中的原因主要是为了向后兼容。一般来说,您应该尽可能使用通用集合类型。
【讨论】:
Dictionarybase 是实现非通用 IDictionary 接口的基类,而 Dictionary 是实现通用 IDictionary 接口的字典的通用版本。使用泛型优于非泛型。
我认为这会更有帮助When to use generics?
通常建议使用泛型集合,因为您可以获得 类型安全的直接好处,而不必从 基集合类型并实现特定于类型的成员。通用的 集合类型通常也比相应的表现更好 非泛型集合类型(并且比派生的类型更好 来自非泛型基本集合类型)当集合元素 是值类型,因为使用泛型不需要将 元素。
泛型类和方法结合了可重用性、类型安全性和 以一种非通用同行无法做到的方式提高效率。 泛型最常用于集合和方法 对它们进行操作。 .NET Framework 类库 2.0 版 提供了一个新的命名空间 System.Collections.Generic,其中包含 几个新的基于泛型的集合类。建议 所有面向 .NET Framework 2.0 及更高版本的应用程序都使用 新的泛型集合类而不是旧的非泛型 同行
【讨论】:
我刚刚完成将旧的 DictionaryBase 类 IXmlSerializable 转换为通用 Dictionary(string, string)。
最痛苦的区别是,对于通用 Dictionary<string, string>,当我为不存在的密钥调用 this[key] 时,我得到一个异常,指出该密钥不存在。
在DictionaryBase 上,我毫无例外地返回null。这对我来说很痛苦,因为系统充满了在尝试获取键值之前没有检查字典 ContainsKey 的代码。假设我在序列化方面搞砸了,这让我更加痛苦。
【讨论】: