【发布时间】:2013-05-08 09:49:21
【问题描述】:
我目前正在尝试检查我的某些列表是否包含对象。 该列表是一个对象的列表,该对象由一个包含 2 个字段的结构组成。
我正在尝试运行这个小代码:
if(m_EatingMoves.Contains(i_Move))
{
....
}
但是即使我可以肯定在调试时看到我想要的 Move 在 *m_EatingMove* 列表中,表达式也会返回 false,我认为问题可能是我没有在我的结构中覆盖了 Equals,所以我在 StackOverFlow 上找到了一个实现,但表达式仍然返回 false。除了实现我自己的 Contains() 之外还有什么想法吗?
这是结构:
public struct Cell
{
public int Row;
public int Col;
public Cell(int i_Row, int i_Col)
{
this.Row = i_Row;
this.Col = i_Col;
}
public override bool Equals(object obj)
{
if (!(obj is Cell))
return false;
Cell cell = (Cell)obj;
return cell.Col == Col && cell.Row == Row;
}
}
现在我有了另一个由上述结构组成的对象:
public class Move
{
private Board.Cell m_Source;
private Board.Cell m_Destination;
public Move(Board.Cell i_Source, Board.Cell i_Destination)
{
m_Source = i_Source;
m_Destination = i_Destination;
}
....(Properties, etc..)
最后我们得到了由构造函数初始化的列表
private List<Move> m_EatingMoves
【问题讨论】:
-
你是否也为
Move实现了Equals? -
你的结构是可变的,即generally inadvisable。
-
@EvanTrimboli,既然你提到了它,我实现了 Equal 而不是 Equals 移动,但是我应该在签名中使用覆盖词吗?
标签: c#