2010-12-04 6 views
3

したがって、Pointと2つのdoubleを持つ単純な構造XYがあります。私はそれらの約300の配列を計算し、その配列をWPFのListViewのItemsSourceとして設定します。その呼び出しは最終的にStackOverflowExceptionをスローします。ListView.ItemsSourceを設定中にStackOverflowが発生する

私はそうのように実装私の構造体で 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

objobjectとしています(Pointですが)ので、プログラムはEquals(object obj)を再度呼び出そうとしています。だから本質的にその過負荷は何度も繰り返し呼びかけています。

は、あなたが内部コールでそれを渡すときPointobjをキャストする必要があり、そうではなくEquals(Point other)メソッドを呼び出します:

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

    return false; 
} 
+0

。それ!私はそんなに愚かな間違いをしたとは信じられない。それを指摘してくれてありがとう。 –

+0

+1:実際にそれを早く見つけ出すために – TalentTuner

+0

@Saurabh:ありがとう、私はメソッドオーバーロードと幾分親和性があります。 – BoltClock

5

ジャスト急ごしらえ - 対等の書き込みが別の方法(オブジェクト)メソッドは、次のとおりです。

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

(括弧の最初のセットは、実際には必要ありませんが、私はそれが可読性に役立つと思います)解決

+0

+1短絡トリックのために: – BoltClock

+0

それは、ありがとう、ありがとう。 –

関連する問題