Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较数组[][]与SequenceEqual()和自定义方法的不同结果_C#_Multidimensional Array_Equals - Fatal编程技术网

C# 比较数组[][]与SequenceEqual()和自定义方法的不同结果

C# 比较数组[][]与SequenceEqual()和自定义方法的不同结果,c#,multidimensional-array,equals,C#,Multidimensional Array,Equals,有人能解释一下为什么我会得到不同的结果吗 bool result = true; for (int row = 0; row < State.Rows; row++) { for (int col = 0; col < State.Cols; col++) { if (map[row][col] != other.map[row][col]) //if (!map[row][col].Equals(other.map[row][col]

有人能解释一下为什么我会得到不同的结果吗

bool result = true;
for (int row = 0; row < State.Rows; row++)
{
    for (int col = 0; col < State.Cols; col++)
    {
         if (map[row][col] != other.map[row][col])
       //if (!map[row][col].Equals(other.map[row][col]))
             result = false;
    }
}
bool sequenceEqual = map.SequenceEqual(other.map);

//result = true
//sequenceEqual = false
bool结果=true;
for(int row=0;row
。我还尝试了答案中的
CollectionComparer
,得到了相同的结果。

完全重写了答案 首先,这两种比较方法做的事情完全不同

手动比较:

  • 比较数组中的所有
    行*col
  • 使用引用相等进行比较(除非项目类型覆盖
    =
    !=
SequenceEqual
比较:

  • 仅直接比较每个数组中的项;这意味着它将
    数组与其他数组进行比较
  • 通过调用
    object.Equals进行比较
结果差异源于以下事实:
SequenceEqual
归结为:

if(!oneArray.Equals(anotherArray)) {
    return false;
}
。这意味着除非
map
other.map
是参考相同子数组的数组,
SequenceEqual
将返回
false

完全重写了答案 首先,这两种比较方法做的事情完全不同

手动比较:

  • 比较数组中的所有
    行*col
  • 使用引用相等进行比较(除非项目类型覆盖
    =
    !=
SequenceEqual
比较:

  • 仅直接比较每个数组中的项;这意味着它将
    数组与其他数组进行比较
  • 通过调用
    object.Equals进行比较
结果差异源于以下事实:
SequenceEqual
归结为:

if(!oneArray.Equals(anotherArray)) {
    return false;
}
。这意味着除非
map
other.map
是参考相同子数组的数组,
SequenceEqual
将返回
false


它们不是等价物

SequenceEqual
对序列的每个元素使用
Equals
。由于
map
是一个二维数组,因此每个“元素”实际上都是一行,这意味着最终被调用的是
array
等于
方法

您的方法使用
直接比较每个元素=,这是您想要的


解决方案是为SequenceEquals提供自定义相等比较器。比较器会再次调用SequenceEquals。

它们不是等价的

SequenceEqual
对序列的每个元素使用
Equals
。由于
map
是一个二维数组,因此每个“元素”实际上都是一行,这意味着最终被调用的是
array
等于
方法

您的方法使用
直接比较每个元素=,这是您想要的


解决方案是为SequenceEquals提供自定义相等比较器。比较器将再次调用SequenceEquals。

正如您所看到的,我尝试了Equals和运算符的两种实现,并重写了它们,结果没有改变。@BeatMe:“重写实现”是什么意思?写得太多做什么?这是所比较类型的实现。正如您所看到的,我尝试了Equals和运算符的实现并重写了它们,结果没有改变。@BeatMe:“重写实现”是什么意思?写得太多做什么?这是ComparedHanks类型的实现,现在确实得到了相同的结果。不知何故,我认为sequenceEqual只比较所有的子元素。是的,但使用
Equals
。问题是,
Array.Equals
没有。谢谢,现在确实得到了相同的结果。不知何故,我认为sequenceEqual只比较所有的子元素。是的,但使用
Equals
。问题是,
Array.Equals
没有。