Kal*_*evi 6 .net c# immutability
var a = ImmutableList<int>.Empty.Add(1).Add(2).Add(3);
var b = ImmutableList<int>.Empty.Add(1).Add(2).Add(3);
Console.WriteLine(a.Equals(b)); // False
Run Code Online (Sandbox Code Playgroud)
在上面的代码a.Equals(b)调用中Object.Equals,因为ImmutableList<T>没有覆盖Equals(object),并且ImmutableList<T>引用类型Object.Equals会(无用的)引用比较。
问题:为什么不ImmutableList<T>覆盖.Equals?将每个包含的对象与每个包含的对象进行比较.Equals并根据这些比较返回结果将是直接的并且期望。测试框架的其余部分甚至是一致的(请参阅 参考资料class String)
注意:上面的代码是用 System.Collections.Immutable.1.1.38-beta-23516
您要做的就是测试集合的内容是否相等。没有 .NET 集合重写Equals来执行此操作。相反,使用SequenceEqual:
Console.WriteLine(a.SequenceEqual(b));
Run Code Online (Sandbox Code Playgroud)
至于为什么——我想这是一个见仁见智的问题。大多数面向参考的平台都尽力不将参考平等与内容平等混淆。
String实际上是非常特殊的情况,尽管它确实实现了IEnumerable,但通常不被视为 /etc 意义上的适当容器List。是。
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |