Jou*_*aas 3 c# stack-overflow wpf
所以我有一个简单的结构,Point有两个双打X和Y.我计算了一个大约三百个数组的数组,并将该数组设置为WPF中ListView的ItemsSource.那个电话最终会抛出一个StackOverflowException.
De调试器Equals在我的struct 中的方法开头打破了,我实现的就是这样(应该重要):
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;
}
Run Code Online (Sandbox Code Playgroud)
如果我改变它:
public override bool Equals(object obj)
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
什么都没发生,数字显示出来.我真的不知道我在这里做错了什么,所以我不知道如何解决这个问题.有什么指针吗?
该程序试图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;
}
Run Code Online (Sandbox Code Playgroud)
快速 - 编写Equals(对象)方法的另一种方法是:
public override bool Equals(object obj)
{
return (obj is Point) && Equals((Point)obj);
}
Run Code Online (Sandbox Code Playgroud)
(第一组括号实际上不是必需的,但我认为它有助于提高可读性.)