是否有任何内置的集合类型 ( 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
在哪里part 应该是一个集合,它的相等性基于它的条目。
要求:
- Collection 只需要是一个简单的可枚举类型
Add
方法 - 项目的顺序很重要
- 集合中可以存在重复项
注意:我可以自己写一个,这很简单。有很多关于 SO 的问题可以帮助解决这个问题。我想问的是框架本身是否有一个类。
最佳答案
保持简单。只需使用接受专门 IEqualityComparer 的 Dictionary ctor(只需在比较器中实现相等逻辑)就可以了。不需要特殊的集合类型等等...
参见 here
关于c# - 是否有任何内置的集合类型或 IEqualityComparer<T> 用于基于其中的项目的相等性的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868306/