我发现自己写了一些方法,其中存在一些永远不应该发生的代码路径。这里是一个简化的例子:
double Foo(double x) {
int maxInput = 100000;
double castMaxInput = (double)maxInput;
if (x < 0 || x > castMaxInput || double.IsNaN(x)) {
return double.NaN;
}
double r = 0;
for (double boundary = 1; boundary<=castMaxInput; boundary++) {
if (x <= boundary) {
r += boundary * (x + 1 - boundary);
return r;
}
else {
r += boundary;
}
}
// we should never get here.
throw new SomeException();
}
在这里最合理的异常情况可能是像这样的:
TheAuthorOfThisMethodScrewedUpException()
如果我们到达for循环的结尾,那么这就是正在发生的事情。不幸的是,使用上述结构化方法,编译器似乎无法聪明地推断出for循环后面的代码永远不会发生。因此,你不能什么都不写,否则编译器会抱怨“并非所有代码路径都返回值”。是的,在循环后面再加入return double.NaN
是可行的。但那样会掩盖问题的来源。
我的问题是 - 是否有一个合适的异常?
for
循环。 - Federico Berasategui