我有一个 switch 语句,我特别需要案例失败。但还有一个条件是有点边缘情况,我需要跳过一个情况。我已经将问题简单地可视化了。
switch (condition)
{
case 5:
if (CallFunction())
** process condition, skip case 4 and resume from case 3 ** <--- Is it possible?
else
* code for case 5 *
[[fallthrough]];
case 4:
* code for case 4 *
[[fallthrough]];
case 3:
* code for case 3
[[fallthrough]];
case 2:
* code for case 2
[[fallthrough]];
case 1:
* code for case 1
[[fallthrough]];
}
现在我已经四处寻找类似的答案,但它们似乎都集中在适当使用break语句并允许在需要时失败,或重新排列案例。无法找到有关此特定问题的任何内容以允许跳过案例。
我这么问有几个原因。首先,在 C# 中不允许失败,并且您使用 goto case X。这似乎有点考虑不周,因为如果你需要一个fallthrough开关,你最终会在每个案例之后都有一个goto。然而在这个特定的例子中,拥有这样的功能可以很好地解决我的这个问题。我可以直接转到案例 3。
我有什么选择?我应该使用标签然后使用 goto 吗?这段代码有点时间紧迫,所以我真的不想在情况 4 中添加一个跳过它的条件,如果 99% 的时间都遇到该条件,则不会。
或者有我不知道的更好的方法吗?
您可能会使用前提条件
if (condition == 5):
if (CallFunction()) condition = 3;
switch (condition)
{
case 5:
* code for case 5 *
[[fallthrough]];
case 4:
* code for case 4 *
[[fallthrough]];
case 3:
* code for case 3
[[fallthrough]];
case 2:
* code for case 2
[[fallthrough]];
case 1:
* code for case 1
[[fallthrough]];
}