列表.包含总是返回false

本文关键字:false 返回 包含总 列表 | 更新日期: 2023-09-27 17:51:19

我正在尝试实现一个真正基本的a *实现。

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

为了便于论证,假设我正试图从(1,0)到达(3,0)。

在第三次迭代之后,我的'completed'列表包含(1,0)和(2,0)。目前,它正在评估所有邻国大约2000人。这包括已经评估的(1,0)。

当调用completed.Contains(neighbour)时,当neighbour =(1,0)时,它应该返回true。然而,它不符合条件。从而创建一个重复节点,并在无限循环中进行评估。

下面是正在发生的事情的代码示例。点=包含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.
}
在我的实际代码中,这些if有更多的条件,但为了论证和我的理智,我把它们当作基本的,没有任何用处。我不知道为什么它看不到现有的值。是因为我不看值本身,而只看索引吗?(因此1,0不存在)?

列表.包含总是返回false

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

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