gpt4 book ai didi

c# - 当理论上不可能到达分支时抛出什么异常?

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:32 24 4
gpt4 key购买 nike

就像这个例子:

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的值?)

最佳答案

I know I could fix this with an else for the last statement, but I often prefer to be explicit.

您可以在不告诉编译器的情况下保持显式。由于唯一明确的原因是为了帮助人类读者,用注释代替实际的 if 可以让你两全其美:程序员看到条件,而编译器不会用不必要的东西打扰你throwreturn

if ( home == away )
return MatchResult.Draw;
else if ( home > away )
return MatchResult.HomeWins;
else // if ( home < away )
return MatchResult.AwayWins;

在因为某些分支无法到达而确实需要抛出异常的情况下,最好的做法是使用断言:

if (!CheckNonNegative(arg)) {
throw new ArgumentException(nameof(arg));
}
...
if (arg == 0) {
... // Do something
} else {
Debug.Assert(arg > 0, "Method has checked arg to be non-negative");
... // Do something else
}

关于c# - 当理论上不可能到达分支时抛出什么异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45564653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com