Когда вы отлаживаете, есть ли способ узнать, является ли объект другим экземпляром?

При отладке я ожидал, что два разных класса будут использовать один и тот же экземпляр объекта. Все свойства были одинаковыми для этих двух объектов, но они были двумя разными экземплярами. Есть ли способ сказать это в отладчике VS?

Чтобы точно сказать, я смог добавить поле в класс:

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

Затем, при отладке, я мог бы хотя бы взглянуть на это поле для каждого из двух экземпляров. Есть ли лучший способ, который не включал бы создание этого поля фиктивного идентификатора?

Ответ 1

При отладке в окне "Локали" щелкните правой кнопкой мыши экземпляр и выберите "Сделать идентификатор объекта".

Это добавит номер, уникальный для этого экземпляра, который отображается всякий раз, когда вы видите этот экземпляр в отладчике (в подсказках, а также в окне часов).

enter image description here

enter image description here

Ответ 2

Метод Object.Equals (объект, объект)

Изменение: для проверки ссылочного равенства используйте ReferenceEquals

Редактирование 2: Отладка, откройте отладочное меню, окно → ближайшее окно (intellisense должно работать здесь) и ?Object.ReferenceEquals(obj1, obj2)

Ответ 3

В дополнение к приведенным выше ответам вы также можете сравнить указатели. Если у вас есть два объекта obj1 и obj2, вы можете проверить (например, в окне просмотра) свои адреса с помощью: &obj1 и &obj2.

Обратите внимание, что объекты могут перемещаться вокруг среды выполнения.NET, поэтому две проверки адреса одного и того же объекта, разделенные некоторым выполнением кода, могут приводить к разным адресам.