2013-03-22 14 views
17

Durante il debug, mi aspettavo che due classi diverse usassero la stessa istanza di un oggetto. Tutte le proprietà erano le stesse per questi due oggetti, ma erano due istanze diverse. C'è un modo per dire che nel debugger VS?Durante il debug, c'è un modo per dire se un oggetto è un'istanza diversa?

Per dire per certo, sono stato in grado di aggiungere un campo alla classe:

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

Poi, quando il debug, almeno potevo guardare quel campo per ciascuna delle due istanze. C'è un modo migliore che non implichi dover creare questo campo ID fittizio?

+3

Object.ReferenceEquals (obj1, obj2) –

+0

@PeterRitchie Quindi come si fa nel debugger? Gli oggetti, che devono essere controllati, si trovano in due classi differenti. –

+1

Maiusc + F9, digitare "Object.ReferenceEquals (obj1, obj2)" e premere Rivaluta o Aggiungi orologio. O semplicemente scrivi "Object.ReferenceEquals (obj1, obj2)" nella colonna Name nella finestra Watch. –

risposta

34

Durante il debug, nella finestra di Locals, fare clic con il tasto destro del mouse sull'istanza e selezionare "Crea ID oggetto".

Questo aggiungerà il numero che è unico per questa istanza che viene visualizzato ogni volta che si vede questa istanza nel debugger (nei tool-tips e nella finestra di controllo).

enter image description here

enter image description here

+0

Grazie, ma non vedo "Crea ID oggetto" quando faccio clic con il pulsante destro del mouse sulla variabile durante il debug. –

+0

Capito! Devi farlo nella finestra di Locals: http://blogs.msdn.com/b/zainnab/archive/2010/03/04/make-objectid-vstipdebug0015.aspx. Suggerimento eccellente! Grazie! –

+0

UN MILIONE DI GRAZIE !!!! –

4

Object.Equals Method (Object, Object)

Modifica: Per controllare l'uguaglianza di riferimento uso ReferenceEquals

Edit 2: Durante il debug, Vai al menu di debug, le finestre -> finestra immediata (intellisense dovrebbe funzionare qui) e ?Object.ReferenceEquals(obj1, obj2)

+1

Questo non lo fa, dal momento che virtuale. Può essere sovrascritto da una classe derivata. –

+3

Utilizzare ReferenceEquals, non uguale a. –

+0

Qualcuno può confermare se (oggetto) p1 == (oggetto) p2; otterrà la stessa cosa, ma un po 'più veloce? Non ricordo il 100%. –

1

Oltre alle risposte di cui sopra, è anche possibile confrontare i puntatori. Se hai due oggetti obj1 e obj2, puoi controllare (ad esempio in Finestra di controllo) i loro indirizzi con: &obj1 e &obj2.

Si noti che gli oggetti possono essere spostati dal runtime .NET, quindi due controlli di indirizzo dello stesso oggetto separati da un'esecuzione di codice in mezzo potrebbero causare indirizzi diversi.

Problemi correlati