2010-06-17 58 views

回答

3

您将不得不定义自己的容器,可能会包装List,以获取equals-hash-equals(GetHashCode和Equals)的有用语义。如果你喜欢,你甚至可以使包装符合IList。

为了避免可变性问题和改变的GetHashCode/Equals结果(这会在散列字典中使用你的新对象存在问题!),你还应该提供一些防范措施(可能会创建一个输入副本你的类型)和/或记录约束条件。

您可以使用SequenceEqual来实现Equals,但您需要以相关的方式实现GetHashCode - 一种简单的方法是每个元素的GetHashCode的异或XOR。

或者,如果这只用于单个字典中,您可以提供自定义IEqualityComparer并避免创建包装类型:Dictionary constructor overload

这取决于你的最终目标是有很好的已经是这样的包装容器:-)

注意:在.NET4有一组Tuple<...> classes其重写GetHashCode和equals。请参阅cadenza作为以前.NET版本的第三方替代品。

+0

非常好,非常感谢! – gatoatigrado 2010-06-17 20:21:29

相关问题