C#如何使用Switch语句进行条件扩展

5

我有一些需要转换的数据,为此我需要使用超过50个情况的开关条件,我需要同样的情况3次,但第三次我需要50个以上的情况,并且我不想两次编写相同的代码。或许有可能做到这样的事情。

switch (example)
{
    case "1":
        //do something
    case "2":
        //do something
    case "50":
        //do something
    //now maybe something like this
    if (condition == true)
    {
        case "1":
            //do something else than above at case "1", and so on 
            //now its i little bit illogical, but i neet to do the first 50 cases and then
            //use the cases 1 to 50 again but with other actions 
    }
}

7
你的问题不够清晰,你想找什么? - Md Farid Uddin Kiron
1
那么,在 case "50" 中,您也想检查 case "51" 等等吗? - Cid
你可以尝试使用goto语句,但不建议这样做。 - AJITH
你的1-50个动作(条件==假)和1-50个动作的条件为真是什么样子? - Emaro
3个回答

18
从C# 7开始,你可以将case语句与when子句组合使用,并使用它来简化你的代码。
switch (example)
{
    case "1":
        //do something
    case "2":
        //do something
    case "50":
        //do something
    //now maybe something like this
    case "51" when condition == true:
        //do something, and so on  
    default:
        break;   
}

从C# 7.0开始,由于case语句不需要互斥,因此您可以添加when子句以指定必须满足的附加条件,以使case语句评估为真。 when子句可以是返回Boolean值的任何表达式。

这很好,但在我需要更多情况的情况下,有些情况需要两次,比如 case "0":如果我使用 when 子句来做这件事,它就不起作用。 - Luuke
@Luuke,您的意思不是很清楚,请更新您的问题并提供这些细节。为了在case语句之间传输控制,您可以使用goto语句。 - Pavel Anikhouski
@Luuke 如果你需要再次使用相同的情况却有不同的操作,看起来像是要编写新的情况并将它们放在单独的方法中。或者将所有操作都放在相同的 case 下,并用 when 子句进行控制。你能分享一下操作的例子吗?为什么需要重复相同的情况但是有不同的操作呢? - Pavel Anikhouski

4

我猜想您正在寻找一种不重复书写 if (condition == true) 的方法。除了 C#7 中的新 when 子句外,您还可以采用两个 switch 语句的不同方法:

if (!condition)
{
    switch (example)
    {
        case "1":
            //do something
        case "2":
            //do something
        case "50":
            //do something
    }
} else {
    switch (example)
    {
        case "51:
            //do something, and so on 
    }
}

0
创建一个始终匹配的情况,使用条件的with
switch (example)
{
    case "1":
    case example when condition == true:
        //do something
    case "2":
        //do something
    case "50":
        //do something
}

1
虽然这段代码可能提供了 OP 问题的解决方案,但强烈建议您提供有关此代码为何以及/或如何回答问题的附加上下文。仅有代码的答案通常在长期内变得无用,因为将来遇到类似问题的观众无法理解解决方案背后的推理。 - E. Zeytinci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接