如何在基于组合返回值的switch语句中使用 && 运算符?

7

我能如何在switch case语句中使用&&运算符?

这是我的需求:

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 && 不能应用于字符串"


3
不要使用switch-case,请使用if语句。 - Selman Genç
5个回答

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

您示例中的真正问题在于,无论是在switch表达式还是在case标签中,都将&&应用于string。 您不能将&&应用于字符串,它仅适用于布尔值(除非您重载它并定义一个新函数,该函数可以在字符串上工作)。

您要尝试的可能是同时检查两个不同变量的值,并使用一个switch。 这是不可能的; switch一次只检查一个变量。 解决方案是使用if语句或专门的CheckStrings(string s1,string s2)方法(该方法可能使用if语句,也可能不使用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.")
}

即使您忽略跳过多余的break;语句并将return放在同一行所带来的收益,也可以更短。


2
@Rambo-Raja 没问题。我认为这是一个好问题,因为虽然它有点不合理,因为“你为什么会认为这是可能的呢?”,但许多学习“switch”的人(包括我)立即想到了像这样的“花式switch”。 - Superbest
1
顺便说一下,我对我给出的方法示例进行了非平凡的编辑(请参见修订详细信息:https://stackoverflow.com/posts/21544951/revisions)。 - Superbest

5

虽然已经有一个被接受的答案了...

要在 switch 中实现逻辑 AND,必须像这样操作:

    switch(x + y)
    {
        case "abc1":
            return 10;
            break;
        case "xyz2":
            return 20;
            break;
    }

这个链接可以帮助你解决问题。

如果需要逻辑上的OR,请查看zey的答案。


3
你是说像这样吗?
switch (value)
{
    case "abc":
    case "1":
        return 10;
    case "xyz":
    case "2":
        return 20;
}

1
OP在他的Switch语句中有两个值,x和y,不仅仅是"value"。 - Pierre-Luc Pineault
1
这将是逻辑上的“或”。没有办法用这种方式实现“与”。 - Sinatr

3

如果你正在使用C# 8及以上版本,则下面的代码片段将产生所需的结果。这是使用表达式未来匹配模式。

string x = "abc", y = "2";
var result = (x, y) switch
{ 
    ("abc","1") => 10,
    ("xyz","2") => 20,
    (_,_) => 0

};
Console.WriteLine($"Arguments : {x}, {y}, result : {result}");

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接