提问者:小点点

在C#中,为什么我需要键入return,当它在启发式上不可达时?


当最后的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,这可能就是原因。


共2个答案

匿名用户

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

匿名用户

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();
    }
}