是否有任何内置集合类型 ( IEnumerable<S>
) 或IEqualityComparer<T>
框架IEnumerable<S>
中的Equals
( 并GetHashCode
相应地) 由其中项目的相等性定义?
就像是:
var x = new SomeCollection { 1, 2, 3 };
var y = new SomeCollection { 1, 2, 3 };
// so that x.Equals(y) -> true
// and x.Shuffle().Equals(y) -> false
或者一个
class SomeComparer<T> : EqalityComparer<IEnumerable<T>> { }
// so that for
var x = new[] { 1, 2, 3 };
var y = new[] { 1, 2, 3 };
// gives
// new SomeComparer<int>().Equals(x, y) -> true
// new SomeComparer<int>().Equals(x.Shuffle(), y) -> false
? 我的问题是,框架中是否有一些行为类似于SomeCollection
代码SomeComparer<T>
中的内容?
为什么我需要它:因为我有一个案例,Dictionary<Collection, T>
其中Key
部分应该是一个集合,并且它的相等性基于它的条目。
要求:
- 集合只需要一个简单的可枚举类型和
Add
方法 - 物品顺序很重要
- 集合中可能存在重复项
注意:我可以自己写一个,这很简单。有很多关于 SO 帮助的问题。我在问框架本身是否有一个类。