c# - BCL 不可变集合 : equality is non-symmetric

标签 c# data-structures immutability base-class-library immutable-collections

由于不可变数据结构是一流的值,我们可以像比较任何其他值一样比较它们的相等性或顺序。但是在 BCL 不可变集合预览中事情变得复杂,因为每个不可变集合都可以通过 IEqualityComparer<T> 进行参数化。/IComparer<T>实例。看起来不应该允许具有不同比较器的不可变集合进行比较(因为没有为比较器本身定义相等性),因为它使相等关系不对称:

var xs = ImmutableList<string>.Empty.Add("AAA")
  .WithComparer(StringComparer.OrdinalIgnoreCase);

var ys = ImmutableList<string>.Empty.Add("aaa")
  .WithComparer(StringComparer.Ordinal);

Console.WriteLine(xs.Equals(ys)); // true
Console.WriteLine(ys.Equals(xs)); // false

这种行为会以某种方式得到修复吗?

最佳答案

平等是一个很难定义的东西,在一个聪明的工程师的房间里就这个定义达成共识就更难了。 :) 实际上,我们将从不可变集合的 EqualsGetHashCode 方法中移除值相等性,以便这些方法提供相同的速度(并且几乎无用)与 BCL 和客户代码中的大多数其他类型一样。

我们非常希望在未来的版本中为不可变集合添加值相等方法。

关于c# - BCL 不可变集合 : equality is non-symmetric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14754194/

相关文章:

c# - EF Core 是否可以将 OnModelCreating/ConfigureConventions 中的代码作为迁移代码生成的一部分?

c# - 如何使用 FluorineFx 从客户端发布音频流?

javascript - 如何使用 facebook/immutable-js 制作自定义不可变类型?

java - 在 Java 中使用流对不可变 `Duration` 对象的集合求和

c# - 如何在新的 ASP.NET Core 中调用 Web API 非默认构造函数

c# - 了解 C# 中的非托管关键字

algorithm - 给定 n-1*n 数组,找到缺失的数字

javascript - 在javascript中创建这种类型的数据结构

algorithm - 如何有效地从给定点找到最远的点(从一组点)?

javascript - 替换状态中的数组元素(整数)