nameof
вычисляет имя T
в время компиляции , поэтому это постоянная строка, "T"
, и, таким образом, будет взят только случай default
.
Вот альтернативная реализация:
public bool Equals(T x, T y)
{
if (x is Accessory && y is Accessory)
{
var ax = x as Accessory;
var ay = y as Accessory;
return ax.Id == ay.Id;
}
return false;
}
C # 7.1 вводит некоторый синтаксический сахар:
public bool Equals(T x, T y)
{
if (x is Accessory ax && y is Accessory ay)
{
return ax.Id == ay.Id;
}
return false;
}
(Обратите внимание, что ваш отрывок возвращает false
, если x и y равны null
; Я не исправил это в моих версиях.)