Есть ли более короткий способ написать что-то вроде этого:
if(x==1 || x==2 || x==3) // do something
Я ищу что-то вроде этого:
if(x.in((1,2,3)) // do something
Есть ли более короткий способ написать что-то вроде этого:
if(x==1 || x==2 || x==3) // do something
Я ищу что-то вроде этого:
if(x.in((1,2,3)) // do something
Это можно сделать с помощью метода List.Contains:
if(new []{1, 2, 3}.Contains(x))
{
//x is either 1 or 2 or 3
}
public static bool In<T>(this T x, params T[] set)
{
return set.Contains(x);
}
...
if (x.In(1, 2, 3))
{ ... }
Необходимое чтение: Методы расширения MSDN
Если он находится в IEnumerable<T>
, используйте это:
if (enumerable.Any(n => n == value)) //whatever
Иначе, здесь короткий метод расширения:
public static bool In<T>(this T value, params T[] input)
{
return input.Any(n => object.Equals(n, value));
}
Поместите его в static class
, и вы можете использовать его следующим образом:
if (x.In(1,2,3)) //whatever
Я полностью угадываю здесь, исправьте код, если я ошибаюсь:
(new int[]{1,2,3}).IndexOf(x)>-1
int x = 1;
if((new List<int> {1, 2, 3}).Contains(x))
{
}
Вы можете создать простой Dictionary<TKey, TValue>
, который будет использоваться как Таблица решений для этой проблемы:
//Create your decision-table Dictionary
Action actionToPerform1 = () => Console.WriteLine("The number is okay");
Action actionToPerform2 = () => Console.WriteLine("The number is not okay");
var decisionTable = new Dictionary<int, Action>
{
{1, actionToPerform1},
{2, actionToPerform1},
{3, actionToPerform1},
{4, actionToPerform2},
{5, actionToPerform2},
{6, actionToPerform2}
};
//According to the given number, the right *Action* will be called.
int theNumberToTest = 3;
decisionTable[theNumberToTest](); //actionToPerform1 will be called in that case.
После инициализации вашего Dictionary
все, что вам нужно сделать, это:
decisionTable[theNumberToTest]();
Этот ответ относится к возможной будущей версии С#;-) Если вы решили переключиться на Visual Basic или Microsoft окончательно решит ввести оператор Select Case в С#, это будет выглядеть так:
Select Case X
Case 1, 2, 3
...
End Select