你能用多个表达式创建一个开关吗?

Can you create a switch with multiple expressions?

我想知道是否可以使用带有多个表达式的开关。例如:

string s = "A";
int i = 3;

switch (s, i)
{
    case "A", 1:
      //DoStuff
      break;
    case "A", 2:
      //DoStuff
      break;
    case "A", 3:
      //DoStuff
      break;
    ...
}

我不想使用数百个 if(s == "A" && i == 1)-语句,所以如果有更好的解决方案就更好了。

PS:这个开关只是一个例子,我实际上是用它来处理更复杂的字符串,比如 Names

从 C# 7 开始,可以执行以下操作:

string s = "A";
int i = 3;

switch (s)
{
    case "A" when i == 1:
      //DoStuff
      break;
    case "A" when i == 2:
      //DoStuff
      break;
    case "A" when i == 3:
      //DoStuff
      break;
    ...
}

当然可以,例如使用元组:

string s = "A";
int    i = 3;

switch (s, i)
{
    case ("A", 1):
        // DoStuff.
        break;

    case ("A", 2):
        // DoStuff.
        break;

    case ("A", 3):
        // DoStuff.
        break;
}

(基本上与您输入的内容完全相同,只是在案例中添加了括号以使其成为元组。)

请注意,这需要 C# 7 或更高版本。