StackOverflow при настройке ListView.ItemsSource - PullRequest
3 голосов
/ 04 декабря 2010

Итак, у меня есть простая структура Point с двумя двойными X и Y. Я вычисляю массив из примерно трехсот из них и устанавливаю этот массив как ItemsSource для ListView в WPF. Этот вызов в конечном итоге бросает StackOverflowException.

Отладка прерывается в начале метода Equals в моей структуре, который я реализовал так (если это имеет значение):

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 ]

6 голосов
/ 04 декабря 2010

Программа пытается снова вызвать 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;
}
5 голосов
/ 04 декабря 2010

Просто быстрое занятие - альтернативный способ написания метода Equals (object):

public override bool Equals(object obj)
{
    return (obj is Point) && Equals((Point)obj);
}

(Первый набор скобок на самом деле не нужен, но я думаю, что он помогает читабельности.)

...