Hashtable对象仍然有用吗?

System.Collections.Hashtable对象是否已过时?

随着C#v2和v3中generics的实现和改进,我发现Hashtable比通用词典更合适已经有很长一段时间了。 从字面上看,我记不清上次使用Hashtable的时候了。

只是想知道是否有其他人发现Hashtable仍然适合或优先实施的情况和该决定的基础 – 易用性,性能,集合大小,对象类型等。

更新:意味着将此问题限制为C#。

除了显而易见的情况,您必须在现有API中使用Hashtable(例如,尚未支持generics类型的语言)。 如果需要从COM访问它们,您可能还需要使用它们。 我相信Hashtable是COM可见,而Dictionary不是。

除此之外,您通常希望使用Dictionary <>,因为它可以避免装箱(性能命中)并提供类型安全性。

在您处理不支持generics类型的语言或语言版本的情况下,Hashtable仍然有用。

编辑

对于C#2.0或更高版本, Hashtable实际上仅对以下场景有用

  • 你想得到一个IDictionary实例的前一个语义,返回null而不是在表中没有键的情况下抛出。
  • 处理暴露Hashtable值的遗留API

如果您遇到C#1.0,​​Hashstable仍然可用作通用映射:)