c# - 是否有任何内置的集合类型或 IEqualityComparer<T> 用于基于其中的项目的相等性的集合?

标签 c# .net collections equality iequalitycomparer

是否有任何内置的集合类型 ( 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 应该是一个集合,它的相等性基于它的条目

要求:

  1. Collection 只需要是一个简单的可枚举类型 Add方法
  2. 项目的顺序很重要
  3. 集合中可以存在重复项

注意:我可以自己写一个,这很简单。有很多关于 SO 的问题可以帮助解决这个问题。我想问的是框架本身是否有一个类。

最佳答案

保持简单。只需使用接受专门 IEqualityComparer 的 Dictionary ctor(只需在比较器中实现相等逻辑)就可以了。不需要特殊的集合类型等等...

参见 here

关于c# - 是否有任何内置的集合类型或 IEqualityComparer<T> 用于基于其中的项目的相等性的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868306/

相关文章:

c# - .NET 4.0 中的内存使用率非常高

c# - 我调用的是 .NET 对象还是 COM 对象?

javascript - 在没有 MasterPage 的 asp.net 中将 JavaScript 添加到许多页面(超过 500 个)

scala - 从 Scala 集合中提取 Option 的最简单方法

c# - 在 C# 中,如何按对象的多个字段对对象集合进行排序?

c# - 添加到数组

c# - 在 Windows 窗体中切换图像

c# - 有没有删除cosmos DB文档的c#代码

c# - 有没有更快的方法来检查这是否是有效日期?

c# - Collection<T> 与 List<T> 您应该在界面上使用什么?