可以像void方法一样切换正在使用的案例吗?

时间:2014-04-17 02:20:19

标签: c# switch-statement

通常我会在返回特定对象的方法中实现switch case。如下所示:

private string testing(string input){
    switch(input)
    {
        case "a":
        {
            ....
            return "TestingResult";
        }
        case "b":
        {
            ....
            return "TestingResultB";
        }
        default:
            return null;
    }
}

现在我想知道是否可以为分配值编写一个开关案例?如下所示:

private string testing(string input){
    string TEST="";
    switch(input)
    {
        case "a":
        {
            ....
            TEST = "TestingResult";
        }
        case "b":
        {
            ....
            TEST = "TestingResultB";
        }
        default:
    }
    return TEST;
}

原因可以通过简单的If-Else语句来实现,这个问题让我了解更多切换案例的功能

当然,在测试之后,我收到错误

control cannot fall through from one case label('case: "a"') to another

3 个答案:

答案 0 :(得分:5)

您需要在每种情况下添加break;

private string testing(string input){
    string TEST="";
    switch(input)
    {
        case "a":
            TEST = "TestingResult";
            break;
        case "b":
            TEST = "TestingResultB";
            break;
        default:
    }
    return TEST;
}

正如其他人所说,每个案例中的大括号都是不必要的。

答案 1 :(得分:4)

是的,你可以。您必须记住在每个{{1}之后添加某种类型的“跳转”语句(包括breakgoto casereturnthrow) } label:

case

注意,此处的大括号是不必要的,并且在此构造中不需要默认值,因为如果它与任何情况都不匹配,它将通过开关块落下。

进一步阅读

答案 2 :(得分:1)

你所写的内容是完全合法的,但除非你在返回之前继续进行并进行一些进一步的操作,否则没有必要进行值赋值。

帮助您更熟练地使用切换/案例陈述:

  • 在你的第一个例子中你不需要默认值,只需在函数末尾有一个最终的返回值
  • 在你的第二个例子中,你根本不需要默认值 - 你什么都不用它
  • 开关/外壳通常用于多个选项,例如4个或更多。任何小于那个和if / else同样可读。您还应该记住,在某些情况下,开关/机箱可以为您提供良好的速度提升