C# linq Переопределение пересечения для сложного объекта - PullRequest
1 голос
/ 17 марта 2020

У меня есть эти два объекта (фиктивный код)

var students = new List<Student>();  
var girl = new Student() { Name = "Simran", StudentId = 4 };  
var sameGirl = new Student() { Name = "Norman", StudentId = 4 };

Я хотел проверить, совпадают ли эти два объекта, используя метод Intersect, но, насколько я понимаю, Intersect использует Equals в поэтому эти два объекта будут иметь значение false, я не знаю, как переопределить методы Equals или Intersect, но по сути я хочу проверить, совпадают ли идентификаторы объектов. Можно ли переопределить метод Equals или Intersect для оценки части объекта, а не всего объекта?

Ответы [ 2 ]

3 голосов
/ 17 марта 2020

Это зависит от вашего выбора. Вы можете переопределить метод Equals и просто сравнить только необходимые свойства и на основе сравнения вернуть true или false.

Итак, реализуйте IComparer и переопределите метод Equals. Включите только StudentId источника и цели для сравнения. Будет ли это соответствовать вашему требованию?

0 голосов
/ 18 марта 2020
thank you all for your help, you pointed me out in the right direction, I didn't really understand how to override the equals or the comparer

   public class fooComparer<T> : IEqualityCmparer<T> where T :notnull
    {
    public book Equals(T? x, T? y)
    {
    return x?.studentId == y?.studentId && x!= null
    }
    public int GetHashCode(T obj)
    {
    return $"{obj.StudentId}
    _{obj.Name}".GetHashCode():}}
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...