数组的StructuralComparisons

Ben*_*sen 5 c# f# base-class-library structural-equality

在F#中:

[0] = [0] = true
Run Code Online (Sandbox Code Playgroud)

在C#或.NET BCL中一般:

StructuralComparisons.Equals(new int[] { 0 }, new int[] { 0 }) == false
Run Code Online (Sandbox Code Playgroud)

为什么?


后记:

我认为我有"正确"等于的原因是因为事实证明这是真的:

var a = new { X = 3, Y = new { Z = -1 } };
var b = new { X = 3, Y = new { Z = -1 } };

StructuralComparisons.Equals(a, b) == true;
Run Code Online (Sandbox Code Playgroud)

ang*_*son 8

那是因为你要去做object.Equals(objA, objB)那种无法处理这种比较的东西.

而是这样做:

StructuralComparisons.StructuralEqualityComparer.Equals(..., ...)
Run Code Online (Sandbox Code Playgroud)

  • 不要.事实上,他们将这些辅助方法嵌入到`object`的基础中已经在很多代码中引起了很多错误,它们可以通过智能感知获得,但有时很难区分你真正想要的那些. (2认同)