List.Contains总是返回false

时间:2015-05-31 12:46:16

标签: c# list if-statement contains

我正在尝试实现一个非常基本的A *实现。

我有一个'已完成'列表,其中包含所有先前评估过的节点的坐标。

为了争论,让我说我想从(1,0)到(3,0)。

在第三次迭代之后,我的“完成”列表包含(1,0)和(2,0)。它目前正在评估所有邻近的邻居。这包括已经评估过的(1,0)。

当调用completed.Contains(neighbor)时,其中neighbor =(1,0)它应该返回true。但它不知何故不符合条件。因此,创建一个重复的节点并在无限循环中进行评估。

下面是代码中的示例。 Point =包含X和Y的简单对象。

point1 = new Point(1,0);
point2 = new Point(2,0);
neighbour = point1;

var completed = new List<Point>();
completed.Add(point1);
completed.Add(point2);

if(completed.Contains(neighbour))
{
     // Do something. (In my code, this should break a loop, so...)
     continue;
}
// However, this is happening instead...
if(!completed.Contains(neighbour))
{
    // Adds to the list of the next node to be worked on. Thus creating a loop.
}

如果在我的实际代码中有更多的条件,但为了论证和我的理智,我已经使它们如上所述基本,但无济于事。我不确定为什么它看不到现有的价值。是因为我不是在看价值本身,而只是看指数? (因此,1,0永远不存在)?

1 个答案:

答案 0 :(得分:1)

方法List<T>.Contains使用方法T.Equals进行比较。 Yous应该为你的Point类重写Equals。

https://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx