切换大小写执行代码而不破坏C#

时间:2018-06-21 09:06:57

标签: c# switch-statement

在C#中是否可以在不中断的情况下执行切换条件?

这是一个使用所需中断的开关示例

var bar = "Foo";
switch (foo) {
    case 0:
    case 1:
        bar += " Bar";
    case 2:
    case 3:
        Console.WriteLine(bar);
        break;
    default:
        break;
}

这是代码应该产生的:

0: Foo Bar
1: Foo Bar
2: Bar
3: Bar
Else: nothing

是否有可能这样做?或者我必须这样做:

var bar = "Foo";
if(foo == 0 || foo == 1) bar += " Bar";
switch (foo) {
    case 0:
    case 1:
    case 2:
    case 3:
        Console.WriteLine(bar);
        break;
    default:
        break;
}

2 个答案:

答案 0 :(得分:3)

这称为隐式下降,C#不支持这种下降。

不过,您可以使用goto case语句。

var bar = "Foo";
switch (foo) {
    case 0:
    case 1:
        bar += " Bar";
        goto case 2;
    case 2:
    case 3:
        Console.WriteLine(bar);
        break;
    default:
        break;
}

答案 1 :(得分:0)

如果您的代码中不强制使用switch大小写,则可以简化代码。 您可以尝试这样的事情:

var bar = "Foo";
if(foo == 0 || foo == 1) bar += " Bar";
if(foo >= 0 && foo <= 3) //Replacement of switch with single if condition
    Console.WriteLine(bar);

Output:
if foo == 1 then print -> "Foo Bar"
if foo == 3 then print -> "Foo"