由于不可变数据结构是一等值,我们可以像与任何其他值一样比较它们的相等性或顺序。但是在 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
这种行为会以某种方式得到解决吗?