我知道您可以使用Enumerable.SequenceEqual来检查相等性。但是多维数组没有这样的方法。关于如何比较二维数组的任何建议?
实际问题:
public class SudokuGrid
{
public Field[,] Grid
{
get { return grid; }
private set { grid = value; }
}
}
public class Field
{
private byte digit;
private bool isReadOnly;
private Coordinate coordinate;
private Field previousField;
private Field nextField;
}
所有这些属性都在SudokuGrid
构造函数中设置。所以所有这些属性都有私有设置器。我想保持这种状态。
现在,我正在使用 C# 单元测试进行一些测试。我想比较 2Grids
他们的价值观,而不是他们的参考。
因为我通过构造函数使用私有设置器设置了所有内容。类中的这个 Equal 覆盖SudokuGrid
是正确的,但不是我需要的:
public bool Equals(SudokuGrid other)
{
if ((object)other == null) return false;
bool isEqual = true;
for (byte x = 0; x < this.Grid.GetLength(0); x++) // 0 represents the 1st dimensional array
{
for (byte y = 0; y < this.Grid.GetLength(1); y++) // 1 represents the 2nd dimensional array
{
if (!this.Grid[x, y].Equals(other.Grid[x, y]))
{
isEqual = false;
}
}
}
return isEqual;
}
这不是我需要的,因为我正在做测试。所以如果我的实际数独是:
SudokuGrid actual = new SudokuGrid(2, 3);
那么我预期的数独不能只是:
SudokuGrid expected = new SudokuGrid(2, 3);
但应该是:
Field[,] expected = sudoku.Grid;
所以我不能使用该类来比较它的网格属性,因为我不能只设置网格,因为 setter 是私有的。如果我不得不更改我的原始代码以便我的单元测试可以工作,那将是愚蠢的。
问题:
- 那么他们是一种实际比较多维数组的方法吗?(那么我可以覆盖多维数组使用的 equal 方法吗?)
- 有没有其他方法可以解决我的问题?