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仍然可用作通用映射:)