27

デバッグ時には、2 つの異なるクラスがオブジェクトの同じインスタンスを使用していると予想していました。これら 2 つのオブジェクトのプロパティはすべて同じでしたが、2 つの異なるインスタンスでした。VSデバッガーでそれを伝える方法はありますか?

確実に伝えるために、クラスにフィールドを追加できました。

private string someId = Guid.NewGuid().ToString();

次に、デバッグ時に、少なくとも 2 つのインスタンスのそれぞれについてそのフィールドを調べることができました。このダミー ID フィールドを作成する必要がないより良い方法はありますか?

4

3 に答える 3

55

デバッグするときは、[ローカル]ウィンドウでインスタンスを右クリックし、[オブジェクトIDの作成]を選択します。

これにより、このインスタンスに固有の番号が追加されます。この番号は、デバッガーで(ツールのヒントとウォッチウィンドウで)このインスタンスを表示するたびに表示されます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2013-03-22T20:10:37.013 に答える
5

Object.Equals メソッド (オブジェクト, オブジェクト)

編集:参照の等価性を確認するには、ReferenceEqualsを使用します。

編集2:デバッグ中に、デバッグメニューに移動し、ウィンドウ->即時ウィンドウ(ここではインテリセンスが機能するはずです)および?Object.ReferenceEquals(obj1, obj2)

于 2013-03-22T20:01:25.113 に答える
2

上記の回答に加えて、ポインターを比較することもできます。obj1との2 つのオブジェクトがある場合obj2、(ウォッチ ウィンドウなどで) と を使用してそれらのアドレスを確認でき&obj1ます&obj2

オブジェクトは .NET ランタイムによって移動される可能性があるため、同じオブジェクトの 2 つのアドレス チェックを分離し、その間に何らかのコードを実行すると、異なるアドレスになる可能性があることに注意してください。

于 2015-08-10T23:57:22.690 に答える