5

由于不可变数据结构是一等值,我们可以像与任何其他值一样比较它们的相等性或顺序。但是在 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

这种行为会以某种方式得到解决吗?

4

1 回答 1

3

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

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

于 2013-02-07T15:31:15.597 回答