AreEqual(new object(), new object())

Имею необходимость сравнить объекты на тождественное равенство, а именно надо чтобы Assert.AreEqual(new object(), new object()); (использую MSTest) или его аналог считал что объекты одинаковы, ведь у них совпадает тип и оба не null, а полей или свойств для сравнения нет. Сравнение по ссылке меня не интересует. FluentAssertions и Shouldly не считают new object() и new object() одинаковыми. А DeepEqual имеет баг и считает объекты одинаковыми даже независимо от типа. введите сюда описание изображениявведите сюда описание изображениявведите сюда описание изображения


Ответы (1 шт):

Автор решения: Aziz Umarov

Извините но вы программируете и путатете не много педали. Ваше предположение или представление не верно о равенствах ссылочных типов данных. Любые ссылочные типы данных не стоит сравнивать на прямую ведь они содержат в себе ссылку на объект, а не объект.

object actual = new object(); object expected = actual;
Assert.AreEqual(actual, expected); //true сравниваются значения в переменных.

object actual = new object(); object expected = new object();
Assert.AreEqual(actual, expected); //false также сравниваются значения в переменных, но тут уже это различные объекты.

костыли предлагаемые вам по сути это перевод в значимую переменную чтоб можно было сравнить не прибегая методу Equal

→ Ссылка