C# 如何使用&&;基于组合返回值的switch语句中的运算符?
如何在开关箱中使用C# 如何使用&&;基于组合返回值的switch语句中的运算符?,c#,switch-statement,C#,Switch Statement,如何在开关箱中使用&&运算符 这就是我想做的: private int retValue() { string x, y; switch (x && y) { case "abc" && "1": return 10; break; case "xyz" && "2": return 20;
&&
运算符
这就是我想做的:
private int retValue()
{
string x, y;
switch (x && y)
{
case "abc" && "1":
return 10;
break;
case "xyz" && "2":
return 20;
break;
}
}
我的问题是“abc”
和“1”
都是字符串类型
,编译器给我的消息是:
“运算符&&不能应用于字符串”
你是说像那样
switch (value)
{
case "abc":
case "1":
return 10;
case "xyz":
case "2":
return 20;
}
switch语句只能应用于整数值或常量表达式。若要检查字符串类型变量的条件,则应使用If-else-If结构。switch语句中没有此类运算符。
switch
语句对值类型或字符串的单个变量进行操作。见:
开关
表达式和案例
标签中,您都将&&
应用于字符串
s。您不能将&&
应用于字符串,它只适用于布尔值(除非您重载它并定义一个新的函数来处理字符串)
您试图完成的可能是用一个开关同时检查两个不同变量的值。这是不可能的,<代码>开关
一次只检查一个变量。解决方案是使用if
语句或专门的检查字符串(字符串s1、字符串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.")
}
更短,即使您忽略了跳过冗余
中断的收益代码>语句并将返回
s放在同一行。尽管已经有一个可接受的答案
要在开关
中实现逻辑和
,必须这样做:
switch(x + y)
{
case "abc1":
return 10;
break;
case "xyz2":
return 20;
break;
}
其中
有关逻辑或的信息,请参见zey答案。如果您使用的是C#8及以上版本,下面的代码片段将产生所需的结果。这是对表达式future使用模式匹配
不要使用开关盒
。use if statements.OP在他的Switch语句中有两个值,x和y,而不仅仅是“value”,这将是合乎逻辑的或。没有办法以这种方式实现和。@Rambo Raja没问题。我认为这是一个很好的问题,因为虽然“你为什么认为这在一开始是可能的?”这一点没有意义,但许多正在学习“切换”的人(包括我)立即对这样的“fancyswitch
es”感到疑惑。@Rambo_Raja顺便说一句,我对我给出的方法示例进行了非常重要的编辑(请参阅修订详细信息:)。
string x = "abc", y = "2";
var result = (x, y) switch
{
("abc","1") => 10,
("xyz","2") => 20,
(_,_) => 0
};
Console.WriteLine($"Arguments : {x}, {y}, result : {result}");