2009-10-19 114 views
4

System.Collections.Hashtable對象是否已過時?哈希表對象仍然有用嗎?

隨着C#v2和v3泛型的實現和改進,我發現Hashtable比一般的Dictionary更適合了很長一段時間。從字面上看,我不記得上次我使用Hashtable。

只是想知道是否有人發現其中一個Hashtable仍然是適當或優先執行併爲決策提供依據的情況下 - ,易用性,性能,集合的大小,對象類型等

UPDATE :意思是將這個問題限制在C#中。

+0

看起來像社區wiki類型的問題。如果每個人都認爲這個問題很有用,將會添加。 – jro 2009-10-19 17:45:10

回答

12
從那裏,你必須使用明顯的情況下

除了在現有的API中需要一個Hashtable(比如還不支持泛型類型的語言)。如果您需要從COM訪問它們,您也可能需要使用它們。我相信Hashtable是COM可見的,而Dictionary不是。

除此之外,你通常希望使用字典<>,因爲它避免了拳擊(性能命中)並提供了類型安全性。

+0

啊,COM互操作。好點子。 – jro 2009-10-19 17:55:39

1

對於處理不支持泛型類型的語言或語言版本的情況,散列表仍然有用。

編輯

對於C#2.0或更高版本,Hashtable真的只是有用的在以下情況下

  • 你要得到一個IDictionary實例的前語義返回null主場迎戰扔在表中沒有鑰匙的情況。
  • 與傳統的API,它暴露了Hashtable

Hashstable交易仍然是作爲一個通用的地圖有用的,如果你堅持用C#1.0 :)

+0

謝謝Jared,我應該更新我的問題以反映C#,具體而言。 – jro 2009-10-19 17:50:46

+0

無效/投擲場景是一個讓我無法理解的場景。儘管最佳實踐似乎另有說明,但我仍然認爲該方法的語法與通用Contains(關鍵)類型的結構相比較。 – jro 2009-10-19 19:50:36