So che è possibile utilizzare Enumerable.SequenceEqual per verificare l'uguaglianza. Ma una matrice multidimensionale non ha un tale metodo. Qualche suggerimento su come confrontare un array bidimensionale?Come confrontare gli array multidimensionali sull'uguaglianza?
problema reale:
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;
}
Tutte queste proprietà vengono impostate nel costruttore SudokuGrid
. Quindi tutte quelle proprietà hanno private setter. Voglio continuare così.
Ora, sto facendo alcuni test con i test dell'unità C#. Voglio confrontare 2 Grids
sui loro valori piuttosto che i loro riferimenti.
Poiché ho impostato tutto con i setter privati tramite il costruttore. Questa sostituzione Pari in classe SudokuGrid
è corretto, ma non quello che mi serve:
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;
}
Non è quello che mi serve dal momento che sto facendo il test. Quindi, se il mio sudoku reale è:
SudokuGrid actual = new SudokuGrid(2, 3);
poi i miei sudoku che ci si attende non può essere solo:
SudokuGrid expected = new SudokuGrid(2, 3);
ma dovrebbe essere:
Field[,] expected = sudoku.Grid;
quindi non posso utilizzare la classe per confrontare la proprietà della griglia, dal momento che non posso semplicemente impostare la griglia poiché setter è privato. Sarebbe stupido se dovessi cambiare il mio codice originale solo così il mio test unitario potrebbe funzionare.
Domande:
- Quindi è il loro un modo per confrontare realtà array multidimensionali? (Quindi posso forse sovrascrivere il metodo uguale utilizzato da un array multidimensionale?)
- C'è forse un altro modo per risolvere il mio problema?
La sua non è del tutto chiaro che cosa il vostro problema. Ma, perché non rimuovere il nesting della griglia con un indicizzatore; cioe' public Field questo [int x, int y] {get; set;} 'in SudokuGrid; Quindi SudokuGrid nasconde effettivamente l'array attuale e fornisce meccanismi per alterare la scheda; Ora puoi verificare che queste funzioni funzionino correttamente; Fintanto che le stesse operazioni su due oggetti producono un risultato uguale, non vedo alcun problema. –
Beh, l'ho risolto aggiungendo un pattern Factory al mio codice. Quindi riempio il mio sudoku nel mio metodo di fabbrica e renderò pubblici tutti i miei metodi. Non esattamente quello che voglio, ma suppongo che non ho scelto nessun altro. – dylanmensaert
[Si prega di non inserire i meta-tag nel titolo] (http://meta.stackexchange.com/q/19190/135230) –