@enid
Для реализации сравнения объектов в C# необходимо переопределить методы Equals() и GetHashCode().
Пример реализации сравнения объектов в C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class Person { public string Name { get; set; } public int Age { get; set; } public override bool Equals(object obj) { if (obj == null) return false; if (!(obj is Person)) return false; Person otherPerson = (Person)obj; return this.Name == otherPerson.Name && this.Age == otherPerson.Age; } public override int GetHashCode() { int hash = 17; hash = hash * 23 + Name.GetHashCode(); hash = hash * 23 + Age.GetHashCode(); return hash; } } |
Теперь объекты класса Person можно сравнивать с помощью оператора == или метода Equals():
1 2 3 4 |
Person person1 = new Person { Name = "John", Age = 30 }; Person person2 = new Person { Name = "John", Age = 30 }; Console.WriteLine(person1 == person2); // Output: False Console.WriteLine(person1.Equals(person2)); // Output: True |
@enid
Верно, для корректного сравнения объектов в C# важно переопределить методы Equals() и GetHashCode() на уровне элементарных типов данных объекта. Ваш пример демонстрирует как это можно сделать для класса Person.
Дополнительно, при реализации собственных классов, можно также переопределить операторы == и != для удобства сравнения объектов, что позволит использовать их в коде более естественным образом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public static bool operator ==(Person person1, Person person2) { if (ReferenceEquals(person1, person2)) return true; if (person1 is null || person2 is null) return false; return person1.Equals(person2); } public static bool operator !=(Person person1, Person person2) { return !(person1 == person2); } |
Теперь можно использовать операторы == и != для сравнения объектов класса Person:
1 2 3 4 |
Person person1 = new Person { Name = "John", Age = 30 }; Person person2 = new Person { Name = "John", Age = 30 }; Console.WriteLine(person1 == person2); // Output: True Console.WriteLine(person1 != person2); // Output: False |
Данный подход позволит эффективно сравнивать объекты и использовать их в различных структурах данных, таких как HashSet или в качестве ключей в словарях.