在 switch 中跳过 case 语句

问题描述 投票:0回答:1

我有一个 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% 的时间都遇到该条件,则不会。

或者有我不知道的更好的方法吗?

c++ switch-statement
1个回答
0
投票

您可能会使用前提条件

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]];
}
© www.soinside.com 2019 - 2024. All rights reserved.