【发布时间】:2012-10-10 05:23:50
【问题描述】:
我创建了一个类 State。对于 State 对象的 Queue,我想测试 Queue 是否已经包含相等值的 State 对象。两个 State 对象,每个都包含一个 2D 布尔数组,当数组的所有值相等且顺序相同时,它们相等。
这是我的相关代码:
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 运算符被重载以进行测试为了那个原因。我必须做什么或改变才能让 Queue.Contains 与我的对象一起工作?我在某处读到,建议在 Equals 重载时重载 getHashCode() 。在这种情况下我需要这样做吗?如果是这样,重载的getHashCode()应该做什么?
【问题讨论】:
-
您的 Equals 方法没有覆盖基类实现,而是创建了一个新方法。尝试将 override 关键字添加到 Equals 方法中,然后查看它是否有效。
标签: c# containers overloading equals