当交换机中的代码在没有明显原因的情况下无法访问时,我正在实现一些通用的IEqualityComparer<T>
Equal()
方法:
public bool Equals(T x, T y)
{
switch (nameof(T))
{
case nameof(Accessory):
return (x as Accessory).Id == (y as Accessory).Id;//not reachable
default:
return false;
}
}
有人有线索吗?
答案 0 :(得分:8)
withStyles
在编译时评估requiredProp
的名称,因此它是一个常量字符串nameof
,因此只有T
案件将被起诉。
这是另一种实现方式:
"T"
C#7.1引入了一些语法糖:
default
(请注意,如果x和y均为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;
}
,那么您的摘录将返回public bool Equals(T x, T y)
{
if (x is Accessory ax && y is Accessory ay)
{
return ax.Id == ay.Id;
}
return false;
}
;我的版本中尚未对此进行修复。)
答案 1 :(得分:0)
可以使用它。这将检查x和y是否为空:
public bool Equals(T x, T y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null)) return false;
if (ReferenceEquals(y, null)) return false;
if (x.GetType()
!= y.GetType()) return false;
return x.Id == y.Id;
}