就像这个例子一样:
public MatchResult GetResult(int home, int away)
{
if ( home == away )
return MatchResult.Draw;
else if ( home > away )
return MatchResult.HomeWins;
else if ( home < away )
return MatchResult.AwayWins;
throw new Exception("Should be impossible");
}
我知道我可以使用else
来解决最后一个问题,但我经常更喜欢明确。当然,出于示例目的,这是一种简化的情况。
接下来是:编译器抛出not all code paths return a value
的原因,因为编译器的情况太复杂或者因为其他原因(比如理论上 )会改变值来自不同线程或其他东西的非托管代码中途的home
?)
答案 0 :(得分:3)
我知道我可以用最后一句话的其他方法解决这个问题,但我经常更喜欢明确。
您可以在不告诉编译器的情况下保持显式。由于明确的唯一理由是帮助人类读者,代替实际的if
的评论为您提供了两全其美的优势:程序员看到了条件,而编译器并没有因为不必要的{{1 s或throw
s。
return
在您真正需要抛出异常的情况下,因为某些分支无法达到最佳操作方法是使用断言:
if ( home == away )
return MatchResult.Draw;
else if ( home > away )
return MatchResult.HomeWins;
else // if ( home < away )
return MatchResult.AwayWins;
答案 1 :(得分:0)
我认为(如果异常是被抛出 - 我宁愿改变代码)这应该抛出NotSupportedException
。通常,如果调用方法但是当时对象的当前状态不支持方法调用,则抛出此异常。
如果说逻辑定律已经破裂,你处于不支持的状态并且无法完成该方法,那只是一小段时间。