2010-12-04 29 views
3

所以我有一個簡單的結構Point與兩個雙打XY。我計算了一個約三百個數組,並將該數組設置爲WPF中ListView的ItemsSource。這個電話最終會拋出StackOverflowExceptionStackOverflow同時設置ListView.ItemsSource

德在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; 
} 

沒有任何事情發生,數字顯示。我真的不知道我在這裏做錯了什麼,所以我不知道如何解決這個問題。任何指針?

回答

6

該程序正在嘗試再次撥打Equals(object obj),因爲您將obj作爲object傳遞,即使它是Point。所以基本上,超載是一次又一次地調用自己。

你要投給objPoint您在內心的召喚傳給它,所以它會調用Equals(Point other)方法代替:

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

    return false; 
} 
+0

那解決。 d it!不能相信我犯了這樣一個愚蠢的錯誤。謝謝你指出。 – 2010-12-04 10:03:41

+0

+1:實際上很早就搞清楚了 – TalentTuner 2010-12-04 10:20:10

5

只是一個匆匆 - 寫的Equals的另一種方式(對象)的方法是:

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

(第一組括號實際上不是必要的,但我認爲它有助於可讀性)

相關問題