2011-01-06 87 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。假設我在序列化過程中搞砸了某些東西,我感到更加痛苦。

相關問題