クラス State を作成しました。State オブジェクトの Queue の場合、Queue に同じ値の State オブジェクトが既に含まれているかどうかをテストしたいと考えています。それぞれが 2D ブール配列を含む 2 つの State オブジェクトは、配列のすべての値が等しく、同じ順序である場合に等しくなります。
これが私の関連コードです:
public class State {
Boolean[,] grid = new Boolean[4,4];
Public State(Boolean[,] passedGrid){ //Constructor
grid = Array.Copy(passedGrid, grid, 16);
}
public bool Equals(State s2){ //Overloaded equals operator
for (int x = 0; x < 4; x++){
for (int y = 0; y < 4; y++){
if (grid[x, y] != s2.grid[x, y]){
return false;
}
}
}
return true;
}
}
public void testContains(Boolean[] testArray) {
Queue<State> testQueue = new Queue<State>();
State s1 = new State(testArray);
State s2 = new State(testArray);
testQueue.Enqueue(s1);
Boolean b = testQueue.Contains(s2);
}
残念ながら、testContains() が呼び出され、最後に testQueue.Contains(s2) の値を確認すると、同じ配列値があり、それをテストするために Equals 演算子がオーバーロードされているにもかかわらず、テストが false であると表示されます。オブジェクトで Queue.Contains を機能させるには、何を行うか、または変更する必要がありますか? Equals がオーバーロードされるたびに getHashCode() をオーバーロードすることが推奨されていることをどこかで読みました。この場合、私はそれをする必要がありますか?もしそうなら、オーバーロードされた getHashCode() は何をすべきでしょうか?