Здравствуйте, VladD2, Вы писали:
VD>Что-то прямо сижу и тихо охрениваю.
VD>В record нельзя добавить собственную реализацию эквивалентности (переопределит Equals) и при это они не умеют реализовывать эквивалентность для записей со списками.
С событиями тоже здорово вышло,
мало кто ожидал, что они станут
и их сравнивать:
using System;
var r1 = new R("R");
var r2 = new R("R");
Console.WriteLine($"Compare {nameof(r1)} and {nameof(r2)} before subscription: {r1 == r2}");
r1.Event += delegate { };
Console.WriteLine($"Compare {nameof(r1)} and {nameof(r2)} after subscription: {r1 == r2}");
record R(string Name) {
public event EventHandler? Event;
}
P.S. По-честному, если рекорд не `sealed`, хорощо б и `EqualityContract` сравнивать и учитывать в хеше:
record R(string Name) {
public event EventHandler? Event;
public virtual bool Equals(R? other) => other != null && other.EqualityContract == EqualityContract && other.Name == Name;
public override int GetHashCode() => (EqualityContract, Name).GetHashCode();
}