Вместо
if (foo == "1" || foo == "5" || foo == "9" ... )
Мне нравится комбинировать их, похожие на следующие (что не работает):
if (foo == ("1" || "5" || "9" ... ))
Возможно ли это?
Вместо
if (foo == "1" || foo == "5" || foo == "9" ... )
Мне нравится комбинировать их, похожие на следующие (что не работает):
if (foo == ("1" || "5" || "9" ... ))
Возможно ли это?
К сожалению, нет, лучше всего создать метод расширения
public static bool IsOneOf<T>(this T value, params T[] options)
{
return options.Contains(value);
}
и вы можете использовать его следующим образом:
if (foo.IsOneOf("1", "5", "9"))
{
...
}
Будучи универсальным, он может использоваться для любого типа (int, string и т.д.).
Вы не можете этого сделать. Вместо этого вы можете сделать это:
string[] validValues = new string[] { "1", "5", "9", "whatever" };
if(validValues.Contains(foo))
{
// do something
}
Один из возможных вариантов:
switch (foo)
{
case "1":
case "5":
case "9":
// your code here
break;
}
Другой возможный вариант:
var vals = new string[] { "1", "5", "9" };
if (vals.Contains(foo))
{
// your code here
}
Если все параметры - это всего лишь один символ, вы можете сделать:
if ("159".IndexOf(foo) != -1)
{
//do something
}
Вот еще одна альтернатива:
bool x = new[] { "1", "5", "9" }.Any(a => a == "5"); //x == true
bool y = new[] { "1", "5", "9" }.Any(a => a == "8"); //y == false
Лучше использовать .Contains(foo)
в этом случае, так как гибкость лямбда здесь довольно пуста. Если бы было сложное выражение, которое нужно было сделать, любой был бы более полезен.
Вы можете сделать это, если это приемлемо для вас:
if ( (new string[] {"1","9","5","6" }).Contains(foo))
{
}
Вы можете использовать оператор switch
:
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}
Если foo
- строка, обратите внимание на чувствительность к регистру.
Если у вас есть несколько условий if, вы всегда должны учитывать использование операторов switch, поскольку компилятор создаст Jumptables, где можно увеличить скорость. Вы должны посмотреть здесь для проверки скорости. Здесь стоит отметить, что если количество условий достаточно велико для покрытия накладных расходов, С# -компилятор также создаст объект HashTable.
Итак, это лучший подход,
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}