你能用多个表达式创建一个开关吗?
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 或更高版本。
我想知道是否可以使用带有多个表达式的开关。例如:
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 或更高版本。