【问题标题】:Difference Between DictionaryBase and Dictionary<Tkey,Tvalue>DictionaryBase 和 Dictionary<Tkey,Tvalue> 的区别
【发布时间】:2011-01-06 11:07:01
【问题描述】:

谁能告诉我DictionaryBase 和通用Dictionary&lt;TKey, TValue&gt; 之间的区别,除了DictionaryBase 是一个抽象类!它们都是强类型的,我在某处读到泛型类在性能上优于非泛型类,应该是首选,那么DictionaryBase 的确切用途是什么? 两个类几乎一样!

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

谢谢

【问题讨论】:

    标签: c# .net collections


    【解决方案1】:

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

    【讨论】:

    • 因此,由于存在通用字典,因此没有实际使用 DictionaryBase!
    【解决方案2】:

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

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

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

    也通过,Introduction to Generics

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

    【讨论】:

    • 这两个类都是强类型的......并且也派生自接口。除了 DictionaryBase System.Collections 中的所有类,我想不是特定于类型的!因此,区别仅在于它们派生自不同的接口并且 DictionaryBase 是一个抽象类。
    • 不应该把非泛型类中的泛型类的对应物设为过时!!!!!!
    • 通用 IDictionary 是非通用 IDictionary 的通用版本。泛型可提高类型安全性和效率。
    【解决方案3】:

    我刚刚完成将旧的 DictionaryBaseIXmlSerializable 转换为通用 Dictionary(string, string)

    最痛苦的区别是,对于通用 Dictionary&lt;string, string&gt;,当我为不存在的密钥调用 this[key] 时,我得到一个异常,指出该密钥不存在。

    DictionaryBase 上,我毫无例外地返回null。这对我来说很痛苦,因为系统充满了在尝试获取键值之前没有检查字典 ContainsKey 的代码。假设我在序列化方面搞砸了,这让我更加痛苦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2011-04-11
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多