Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用&&;基于组合返回值的switch语句中的运算符?_C#_Switch Statement - Fatal编程技术网

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没问题。我认为这是一个很好的问题,因为虽然“你为什么认为这在一开始是可能的?”这一点没有意义,但许多正在学习“切换”的人(包括我)立即对这样的“fancy
switch
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}");