我想要的东西是Python的元组(或者,对于集合,frozensets),它们是可以清除的。我有一个List<String>
,它肯定没有正确散列(即按值)。
答案 0 :(得分:3)
您必须定义自己的容器,可能包装List,以获得有效的语义 - equality-hash-equals(GetHashCode和Equals)。如果你愿意,甚至可以让包装器符合IList。
为了避免可变性问题和更改GetHashCode / Equals结果(这会使哈希字典中的新对象出现问题!),您还应提供某种保护(也许在创建您的输入时复制输入)输入和/或记录约束。
你可以使用SequenceEqual来实现Equals,但是你需要以相关的方式实现GetHashCode - 一个简单的方法是改变每个元素的GetHashCode的XOR。
或者,如果仅在单个词典中使用它,则可以提供自定义IEqualityComparer并避免创建包装类型:Dictionary constructor overload。
这取决于你的最终目标是什么,而且很可能已经是这样的包装容器: - )
注意:在.NET4中有一组Tuple<...> classes覆盖GetHashCode和Equals。请参阅cadenza作为先前.NET版本的第三方替代方案。