Reputation: 589
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"
Upvotes: 8
Views: 22886
Reputation: 51
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}");
Upvotes: 3
Reputation: 26612
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 string
s. 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 return
s on the same line.
Upvotes: 9
Reputation: 21999
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.
Upvotes: 5
Reputation: 6103
You mean like that ?
switch (value)
{
case "abc":
case "1":
return 10;
case "xyz":
case "2":
return 20;
}
Upvotes: 4
Reputation: 753
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.
Upvotes: 1