Ваш код работает нормально, и это абсолютно нормально, что он печатает "false".
Тип, который вы назвали Employee, является классом, и поэтому это ссылочный тип.По умолчанию ссылочные типы сравниваются по ссылке .Это семантика равенства, определенная в System.Object, и она наследуется всеми классами, если не предусмотрено переопределение метода Equals.
Каждый раз, когда вы пишете код new Employee (), вы создаете новый экземпляр класса employee : это в основном означает, что вы создаете новый объект ичто вы выделяете новую память в куче (которая является частью памяти компьютера, где живут объекты C #).
Посмотрите на следующий код:
var mark = new Employee(){ Name = "Mark" };
var henry = new Employee() { Name = "Henry" };
var areEquals = mark.Equals(henry);
var areSameReference = Object.ReferenceEquals(mark, henry);
Console.WriteLine(areEquals); // this will print false
Console.Writeline(areSameReference); // this will print false
В приведенном выше коде вы создаете два разных экземпляра класса Employee и, тем самым, создаете два разных объекта в куче (другими словами, вы выделяете два разных пространства памяти для хранения двух разных объектов).Вот почему, когда вы вызываете Equals, вы получаете false, потому что по умолчанию ссылочные типы сравниваются по ссылке.
Когда вы вызываете Object.ReferenceEquals для переменных, пометьте и Генри, вы получите false, потому что эти переменные ссылаются на два разных адреса памяти, потому что два созданных вами объекта хранятся в разных адресах памяти кучи.
Если вы хотите сравнить объекты Employee с другой семантикой, например, сравнивая их имена, вы должны переопределить как Equals, так и GetHashCode.Я предлагаю вам внимательно прочитать вводную книгу по C #, такую как эта