所以我有一个简单的结构Point
,有两个双X
和Y
。我计算了一个大约三百个数组的数组,并将该数组设置为WPF中ListView的ItemsSource。该电话最终会抛出StackOverflowException
。
在我的struct中Equals
方法的开头,de调试器中断了,我实现的就是这样(应该重要):
public override bool Equals(object obj)
{
if (obj is Point)
return Equals(obj);
return false;
}
public bool Equals(Point other) // Implement IEquatable<T>
{
return this.x == other.x && this.y == other.y;
}
如果我改变它:
public override bool Equals(object obj)
{
return false;
}
没有任何反应,数字会显示出来。我真的不知道我在这里做错了什么,所以我不知道如何解决这个问题。有什么指针吗?
答案 0 :(得分:6)
该计划正试图再次致电Equals(object obj)
,因为您将obj
作为object
传递,即使它是Point
。所以基本上,重载一次又一次地调用自己。
在内部调用中传递obj
时,您必须将Point
投射到Equals(Point other)
,因此它将调用public override bool Equals(object obj)
{
if (obj is Point)
return Equals((Point) obj);
return false;
}
方法:
{{1}}
答案 1 :(得分:5)
快速 - 编写Equals(对象)方法的另一种方法是:
public override bool Equals(object obj)
{
return (obj is Point) && Equals((Point)obj);
}
(第一组括号实际上并不是必需的,但我认为这有助于提高可读性。)