在C#中,当返回是试探性的不可访问时,为什么我需要键入它?

在C#中,当返回是试探性的不可访问时,为什么我需要键入它?,c#,C#,当最终返回语句被删除时,这个简单的C#方法就变得不可编译了。 为什么?我要说的是,切换已经完成,因此无法获得最终返回 private static object Convert(bool? predicate) { switch (predicate) { case false: return null; case true: return null; case null: return null; } retur

当最终返回语句被删除时,这个简单的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
这可能就是原因。

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

Marc认为这取决于编译器的性能,这是正确的。如果你停留在C版本的早期版本,并且想要声明你的意图稍微好一点,你可以考虑在不应该发生的情况下抛出一个<代码>无效操作异常>代码>;p>
private static object Convert(bool? predicate)
{
    switch (predicate)
    {
        case false: return null;
        case true: return null;
        case null: return null;                
        default: throw new InvalidOperationException();
    }
}