设置ListView.ItemsSource时的StackOverflow

时间:2010-12-04 10:00:12

标签: c# wpf stack-overflow

所以我有一个简单的结构Point,有两个双XY。我计算了一个大约三百个数组的数组,并将该数组设置为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;
}

没有任何反应,数字会显示出来。我真的不知道我在这里做错了什么,所以我不知道如何解决这个问题。有什么指针吗?

2 个答案:

答案 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);
}

(第一组括号实际上并不是必需的,但我认为这有助于提高可读性。)