2016-05-11 6 views
-1

オブジェクトのEqualsをオーバーライドするコードを記述しました。 私はそれを書いた後で、最後のコード行を処理するIEquatableインターフェイスをまだ実装していないので、StackOverFlowExceptionを持つつもりであることを認識しました。しかし、私はあなたが以下の画像で自分自身のために見ることができ、起こる、といくつかの奇妙なことが起こるか見てコードを実行します。なぜ機能が実行される前にstackoverflow例外が発生するのですか?

enter image description here

ブレークポイントは、この時点でも、hittableではないように思えます私のプログラムが実行される前でもコードが使用されています。それはCLRによって行われる何かですか?それは別のものですか?

ありがとうございました!

+1

Equalsを呼び出すことが運命づけられています。それは内部が白で(赤ではなく警告があります)、コードは実行中のprobramと一致しません。ソリューションを再構築します。 –

+0

'IEquatable 'インターフェイスを実装しましたか? –

+0

これは役立つ可能性があります[再帰的な深さ]を見てください(http://stackoverflow.com/questions/4513438/c-sharp-recursion-depth-how-deep-can-you-go) –

答えて

2

スタックはおそらく

if (ReferenceEquals(right, null)) 

に(ラクダの背中を壊す最後のわら)使い果たされ、スタックは、他の4(8)rightを格納するバイトはありません。 rightQuality型である場合 実際の理由は

return Equals(right as Quality) 

であると思われる、コードがあなたのbrakepointがヒットすることはありません、何度も何度も

+0

再帰部分はどこにあるのか分かりますが、その行の隣のマークで表示できます。これは私の質問ではありません。問題はなぜブレークポイントが見逃されたのかです。私はそれが無限の再帰関数であっても、Equalsへの最初の呼び出しでブレークポイントにヒットすることを期待しています。 –

+0

@Moti Berger:スタックが消耗していて、最終的にはスタックが別の4/8バイトを割り当てることができません。この最終的な打撃は、いくつかのランダム/奇妙な点で発生する可能性があります –

+0

無限再帰呼び出しでは、最終的にスタックが使い果たされることは理解していますが、枯渇のために関数のコードは少なくとも1回は実行する必要がありますヒット。私のコードではない何かが、自分のコードが実行される前に、クオリティタイプのEquals関数を使用していなければなりません!私の質問は、誰がその機能を使用したかです。プログラムが起動する前にクラッシュしました! –

関連する問題