2

当最终的 return 语句被删除时,这个简单的 C# 方法变得不可编译。为什么?我会说切换已完成,因此最终返回是无法到达的。

private static object Convert(bool? predicate)
{
    switch (predicate)
    {
        case false: return null;
        case true: return null;
        case null: return null;
    }

    return null;
}

编辑:我正在使用 C# 7.3 这可能就是原因。

4

2 回答 2

6

因为编译器并不总是完美的,而且您使用的是较旧的编译器。如果您使用 C# 8.0 编译器:它完全按照您的意愿工作。

于 2020-06-10T14:50:30.970 回答
2

Marc 认为这取决于编译器的能力是正确的。如果你被 C# 的早期版本困住并且想要更好地声明你的意图,你可以考虑抛出一个不应该发生InvalidOperationException的案例;

private static object Convert(bool? predicate)
{
    switch (predicate)
    {
        case false: return null;
        case true: return null;
        case null: return null;                
        default: throw new InvalidOperationException();
    }
}
于 2020-06-10T14:58:31.413 回答