当最后的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,这可能就是原因。
因为编译器并不总是完美的,而且您使用的是较旧的编译器。 如果您使用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();
}
}