如何在switch语句中使用&&运算符基于组合返回值?

Rac*_*rma 4 c# switch-statement

如何&&在开关盒中使用操作器?

这就是我想要做的:

private int  retValue()
{
    string x, y;
    switch (x && y)
    {
        case "abc" && "1":
            return 10;
            break;
         case "xyz" && "2":
             return 20;
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,"abc"并且"1"都是类型string,编译器给我的消息:

"operator &&不能应用于字符串"

Sup*_*est 7

switch声明中没有这样的运算符.该switch语句对单个变量进行操作,该变量是值类型或字符串.看到:

您的示例中的实际问题是switch表达式和case标签中的两个都适用&&strings.你不能应用于&&字符串,它只适用于布尔值(除非你重载它并定义一个对字符串起作用的新函数).

您要完成的任务可能是同时检查两个不同变量的值switch.这是不可能的; switch一次只检查一个变量.解决方案是使用if语句或专用CheckStrings(string s1, string s2)方法(可能使用也可能不使用if语句).


在评论中,您表达了对长度的担忧.注意:

private int retValue(string x, string y)
{
    if (x == "abc" && y == "1") return 10;
    if (x == "xyz" && y == "2") return 20;
    throw new Exception("No return value defined for these two strings.")
}
Run Code Online (Sandbox Code Playgroud)

更短,即使您通过跳过冗余break;语句并将returns放在同一行上来减少收益.

  • @Rambo-Raja 没问题。我认为这是一个很好的问题,因为虽然这有点没有意义,因为“为什么你认为这首先是可能的?”,许多正在学习“switch”的人(包括我)立即想知道像这样“花哨的‘开关’”。 (2认同)

Sin*_*atr 5

尽管已经有一个被接受的答案......

要实现AND中的逻辑switch,必须这样做:

    switch(x + y)
    {
        case "abc1":
            return 10;
            break;
        case "xyz2":
            return 20;
            break;
    }
Run Code Online (Sandbox Code Playgroud)

哪个有效

对于逻辑,OR请参阅zey答案。