该开关盒如何具有无法访问的代码?

时间:2018-08-26 00:04:49

标签: c# switch-statement unreachable-code

当交换机中的代码在没有明显原因的情况下无法访问时,我正在实现一些通用的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;
    }
}

有人有线索吗?

2 个答案:

答案 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;
        }