Это фактически недоступный код, так как ReferenceEquals()
является задокументированным для возврата true
, если оба операнда равны нулю.
РЕДАКТИРОВАТЬ: Чтобы конкретно ответить на ваш вопрос (d): Когда ReferenceEquals
возвращает true
, то две ссылки должны быть одинаковыми; поэтому они указывают на один и тот же объект. Таким образом, если вы не делаете что-то непредсказуемое в методе доступа к свойству, значения для идентификатора будут считываться из одного и того же объекта и будут ожидаемыми такими же. (Мораль этой истории состоит в том, что свойства должны вести себя воспроизводимым образом без других побочных эффектов, например, возможно, присвоение идентификатора, если ни один из них уже не установлен)
Вполне возможно, что у вас может быть два объекта с одинаковым Id
, но разными ссылками. Например:
Foo a = new Foo();
Foo b = new Foo();
ReferenceEquals()
выдаст false при сравнении a
и b
(поскольку они различаются экземплярами ), но если этот конструктор не сделал ничего подобного для выделения Id
, я бы ожидал их чтобы поделиться этим идентификатором и ваша проверка на равенство прошла бы.