关于c#:如何使用&&, 在switch语句中

How to use && operator in switch statement based on a combined return a value?

在开关箱中如何使用&&运算符?

这就是我想做的:

1
2
3
4
5
6
7
8
9
10
11
12
13
private int  retValue()
{
    string x, y;
    switch (x && y)
    {
        case"abc" &&"1":
            return 10;
            break;
         case"xyz" &&"2":
             return 20;
            break;
    }
}

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

"operator && cannot be applied to string"


switch语句中没有这样的运算符。switch语句对值类型或字符串的单个变量进行操作。见:

  • http://www.dotnetperls.com/switch
  • http://msdn.microsoft.com/en-us/library/06tc147t.aspx

您示例中的实际问题是,在switch表达式和case标签中,您将&&应用于string。您不能将&&应用于字符串,它只适用于布尔值(除非您重载它并定义一个对字符串有效的新函数)。

您试图完成的工作可能是同时用一个switch检查两个不同变量的值。这是不可能的;switch一次只检查一个变量。解决方案是使用if语句或专用CheckStrings(string s1, string s2)方法(可以使用或不使用if语句)。

在一条评论中,您对长度表示了关注。观察:

1
2
3
4
5
6
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.")
}

更短,即使您将跳过多余的break;语句并将return放在同一行的收益进行折扣。


尽管已经有一个公认的答案…

为了在switch中实现逻辑AND,必须这样做:

1
2
3
4
5
6
7
8
9
    switch(x + y)
    {
        case"abc1":
            return 10;
            break;
        case"xyz2":
            return 20;
            break;
    }

它起作用。

逻辑OR见Zey答案。


switch语句只能应用于整数值或常量表达式。如果要检查字符串类型变量的条件,则应使用if-else if结构。


你的意思是这样?

1
2
3
4
5
6
7
8
9
switch (value)
{
    case"abc":
    case"1":
        return 10;
    case"xyz":
    case"2":
        return 20;
}