How to use && operator in switch statement based on a combined return a value?

15,587

Solution 1

There is no such operator in switch statements. The switch statement operates on a single variable which is a value type or a string. See:

The real problem in your example is that both in the switch expression, and in case labels, you are applying && to strings. You cannot apply && to strings, it only works on booleans (unless you overload it and define a new function that does work on strings).

What you are trying to accomplish is probably to simultaneously check the values of two different variables with one switch. This is impossible; switch only checks one variable at a time. The solution is to use if statements or a specialized CheckStrings(string s1, string s2) method (which may or may not use if statements).


In a comment you have expressed concerns with length. Observe:

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.")
}

Shorter, even if you discount the gains from skipping redundant break; statements and putting returns on the same line.

Solution 2

Despite there is an accepted answer already...

To achieve logical AND in switch, it has to be done like this:

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

Which works.

For logical OR see zey answer.

Solution 3

If you are using C# 8 and above below code snippet will yield the desired result. This is using pattern matching with expression future.

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

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

Solution 4

You mean like that ?

switch (value)
{
    case "abc":
    case "1":
        return 10;
    case "xyz":
    case "2":
        return 20;
}

Solution 5

switch statement can only be applied to integer values or constant expressions. If you want to check your conditions on string type variable, then you should use if-else-if structure.

Share:
15,587
RachitSharma
Author by

RachitSharma

Updated on August 13, 2022

Comments

  • RachitSharma
    RachitSharma over 1 year

    How can I use && operator in switch case?

    This is what i want to do:

    private int  retValue()
    {
        string x, y;
        switch (x && y)
        {
            case "abc" && "1":
                return 10;
                break;
             case "xyz" && "2":
                 return 20;
                break;
        }
    }
    

    My problem is that "abc" and "1" are both of type string and the compiler gives me message that:

    "operator && cannot be applied to string"

  • Pierre-Luc Pineault
    Pierre-Luc Pineault about 10 years
    OP have two values in his Switch statement, x and y, not only "value"
  • Sinatr
    Sinatr about 10 years
    This would be logical OR. There is no way to achieve AND in this manner.
  • Superbest
    Superbest about 10 years
    @Rambo-Raja No problem. I think this is a good question, because while it kind of doesn't make sense because "why would you think this is possible in the first place?", many people who are learning about "switch" (including me) immediately wonder about "fancy switches" like this.
  • Superbest
    Superbest about 10 years
    @Rambo_Raja By the way, I have made non-trivial edits to the method example I gave (see revision details: stackoverflow.com/posts/21544951/revisions).