Подтвердить что ты не робот

Проверьте, находится ли переменная в специальном списке значений

Есть ли более короткий способ написать что-то вроде этого:

if(x==1 || x==2 || x==3) // do something

Я ищу что-то вроде этого:

if(x.in((1,2,3)) // do something
4b9b3361

Ответ 1

Это можно сделать с помощью метода List.Contains:

if(new []{1, 2, 3}.Contains(x))
{
    //x is either 1 or 2 or 3
}

Ответ 2

public static bool In<T>(this T x, params T[] set)
{
    return set.Contains(x);
}

...

if (x.In(1, 2, 3)) 
{ ... }

Необходимое чтение: Методы расширения MSDN

Ответ 3

Если он находится в 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

Ответ 4

Я полностью угадываю здесь, исправьте код, если я ошибаюсь:

(new int[]{1,2,3}).IndexOf(x)>-1

Ответ 5

int x = 1;
if((new List<int> {1, 2, 3}).Contains(x))
{
}

Ответ 6

Вы можете создать простой 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]();

Ответ 7

Этот ответ относится к возможной будущей версии С#;-) Если вы решили переключиться на Visual Basic или Microsoft окончательно решит ввести оператор Select Case в С#, это будет выглядеть так:

Select Case X
    Case 1, 2, 3
    ...
End Select