Instead of
if (foo == "1" || foo == "5" || foo == "9" ... )
I like to combine them similar to the following (which doesn't work):
if (foo == ("1" || "5" || "9" ... ))
Is that possible?
Instead of
if (foo == "1" || foo == "5" || foo == "9" ... )
I like to combine them similar to the following (which doesn't work):
if (foo == ("1" || "5" || "9" ... ))
Is that possible?
Unfortunately not, your best bet is to create an extension method
public static bool IsOneOf<T>(this T value, params T[] options)
{
return options.Contains(value);
}
and you can use it like this:
if (foo.IsOneOf("1", "5", "9"))
{
...
}
Being generic, it can be used for any type (int, string etc).
You cannot do it this way. Instead you can do this:
string[] validValues = new string[] { "1", "5", "9", "whatever" };
if(validValues.Contains(foo))
{
// do something
}
One possible option is this:
switch (foo)
{
case "1":
case "5":
case "9":
// your code here
break;
}
Another possible option is this:
var vals = new string[] { "1", "5", "9" };
if (vals.Contains(foo))
{
// your code here
}
If all options are just one character you could do:
if ("159".IndexOf(foo) != -1)
{
//do something
}
Here is yet another alternative:
bool x = new[] { "1", "5", "9" }.Any(a => a == "5"); //x == true
bool y = new[] { "1", "5", "9" }.Any(a => a == "8"); //y == false
It is better to use .Contains(foo)
in this case, as the flexibility of the lambda is rather wasted here. If there was a complex expression that needed to be done, Any would be more useful.
You can do this, if that's acceptable to you:
if ( (new string[] {"1","9","5","6" }).Contains(foo))
{
}
You may use the switch
statement:
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}
If foo
is a string, pay attention on case sensitivity.
If you have multiple if conditions you should always consider using switch statements as compiler will create Jumptables whereever possible to increase speed. You should take a look here for speed test. Thing to note here is that if number of conditions is big enough to cover overheads, C# compiler will also create a HashTable object.
So this is a better approach,
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}