How to use && operator in switch statement based on a combined return a value?
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 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.
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.
RachitSharma
Updated on August 13, 2022Comments
-
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 typestring
and the compiler gives me message that:"operator && cannot be applied to string"
-
Pierre-Luc Pineault about 10 yearsOP have two values in his Switch statement, x and y, not only "value"
-
Sinatr about 10 yearsThis would be logical
OR
. There is no way to achieveAND
in this manner. -
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
switch
es" like this. -
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).