2013-03-22 17 views
17

Podczas debugowania oczekiwałem, że dwie różne klasy będą używać tej samej instancji obiektu. Wszystkie właściwości były takie same dla tych dwóch obiektów, ale były to dwa różne przypadki. Czy jest jakiś sposób, aby to powiedzieć w debugerze VS?Podczas debugowania istnieje sposób sprawdzenia, czy obiekt jest inną instancją?

aby powiedzieć na pewno, że był w stanie dodać pole do klasy:

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

Potem, gdy debugowanie, mogę przynajmniej spojrzeć na tym polu dla każdej z dwóch przypadkach. Czy istnieje lepszy sposób, który nie wymagałby tworzenia tego fałszywego pola identyfikacyjnego?

+3

Object.ReferenceEquals (obj1, obj2) –

+0

@PeterRitchie Jak to zrobić w debugerze? Obiekty, które należy sprawdzić, są w dwóch różnych klasach. –

+1

Shift + F9, wpisz "Object.ReferenceEquals (obj1, obj2)" i naciśnij Ponów ocenę lub Dodaj zegarek. Lub po prostu wpisz "Object.ReferenceEquals (obj1, obj2)" w kolumnie Nazwa w oknie Watch. –

Odpowiedz

34

Podczas debugowania, w oknie Locals, kliknij instancję prawym przyciskiem myszy i wybierz "Make Object ID".

Spowoduje to dodanie unikalnego dla tej instancji numeru, który będzie wyświetlany za każdym razem, gdy pojawi się ta instancja w debugerze (zarówno w narzędziach, jak iw oknie zegarka).

enter image description here

enter image description here

+0

Dzięki, ale nie widzę "Ustaw identyfikator obiektu", gdy kliknę prawym przyciskiem myszy podczas debugowania. –

+0

Gotowy! Musisz to zrobić w oknie Locals: http://blogs.msdn.com/b/zainnab/archive/2010/03/04/make-objectid-vstipdebug0015.aspx. Doskonała wskazówka! Dzięki! –

+0

MILION DZIĘKUJĘ, ŻE JESTEŚ !!!! –

4

Object.Equals Method (Object, Object)

Edit: Aby sprawdzić równość odniesienie używać ReferenceEquals

Edycja 2: podczas debugowania, Przejdź do menu Debug systemu Windows -> natychmiastowe okna (intellisense powinien pracować tutaj) i ?Object.ReferenceEquals(obj1, obj2)

+1

To nie robi tego, ponieważ wirtualny. Może być nadpisany przez klasę pochodną. –

+3

Użyj ReferenceEquals, a nie Equals. –

+0

Czy ktoś może potwierdzić, czy (obiekt) p1 == (obiekt) p2; osiągnie to samo, ale trochę szybciej? Nie pamiętam 100%. –

1

Oprócz powyższych odpowiedzi, można również porównać wskaźniki. Jeśli masz dwa obiekty: obj1 i obj2, możesz sprawdzić (np. W oknie podglądu) ich adresy za pomocą: &obj1 i &obj2.

Należy pamiętać, że obiekty mogą być przemieszczane w środowisku wykonawczym .NET, więc dwie weryfikacje adresu tego samego obiektu, oddzielone wykonywaniem niektórych znaków, mogą powodować różne adresy.

Powiązane problemy