【发布时间】:2012-03-30 08:46:54
【问题描述】:
以下代码摘录无法编译,导致not code paths return a value。 Test1StandardChargeCalculator 和 Test2StandardChargeCalculator 两种类型都派生自返回类型。
我知道如何解决这个问题,但我的问题是我为什么必须这样做? bool 是一个值类型 - 因此只能表示 true 或 false,这两者都在这个 sn-p 中得到了满足。那么为什么编译失败呢?
internal StandardChargeCalculator Create()
{
bool value = true;
switch (value)
{
case true:
return new Test1StandardChargeCalculator();
case false:
return new Test2StandardChargeCalculator();
}
} //not all code paths return a value
【问题讨论】:
-
你真的使用 switch 进行真假检查吗?
-
我认为对于布尔值,这是一个有趣的问题,因为停止问题不适用于特殊情况。我的猜测:如果 switch 对某些情况有效,但不是对所有情况都有效(因为对于一般情况,无法解决停机问题),因此编译器开发人员选择了这种行为,因为打开 bool 并不是一个很大的问题用例。
-
@willDaBeast case 语句在块返回或抛出时不需要中断,因为这已经防止了失败。
-
Oded 的回答是正确的;我只想补充一点,我在 2009 年写了一篇关于这个案例的文章,以及 switch 语句的其他三个有趣的奇怪行为。你可以在这里阅读:blogs.msdn.com/b/ericlippert/archive/2009/08/13/…
标签: c# .net compiler-errors value-type