Объединение нескольких условных выражений в C # - PullRequest
23 голосов
/ 17 июня 2011

В C # вместо выполнения if(index == 7 || index == 8) есть ли способ объединить их? Я думаю о чем-то вроде if(index == (7, 8)).

Ответы [ 9 ]

55 голосов
/ 17 июня 2011

Вы можете сделать это с помощью метода расширения.

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

Тогда ...

if(index.In(7,8))
{
    ...
}
9 голосов
/ 17 июня 2011

Вы можете поместить значения, которые вам нужно сравнить, во встроенный массив и использовать метод расширения Contains. См. эту статью для начала.

Несколько фрагментов, демонстрирующих концепцию:

int index = 1;
Console.WriteLine("Example 1: ", new int[] { 1, 2, 4 }.Contains(index));

index = 2;
Console.WriteLine("Example 2: ", new int[] { 0, 5, 3, 4, 236 }.Contains(index));

Выход:

Example 1: True
Example 2: False
2 голосов
/ 17 июня 2011
switch (GetExpensiveValue())
{
case 7: case 8:
   // do work
   break;
}

Это, очевидно, требует больше кода, но может спасти вас от оценки функции несколько раз.

2 голосов
/ 17 июня 2011

Вы можете использовать это:

 if (new List<int>() { 7, 8 }.Contains(index))
2 голосов
/ 17 июня 2011

Напишите свои собственные методы расширения, чтобы вы могли написать

if (index.Between(7, 8)) {...}

где Между определено как:

    public static bool Between (this int a, int x, int y)
    {
        return a >= x && a <= y;
    }
2 голосов
/ 17 июня 2011

В текущем наборе синтаксиса C # нет способа объединить несколько правых операндов для передачи одному бинарному оператору, насколько мне известно.

1 голос
/ 17 июня 2011
if ((new int[]{7,8}).Contains(index))
0 голосов
/ 17 июня 2011

Тебе нужно что-то подобное

        int x = 5; 

        if((new int[]{5,6}).Contains(x)) 
        {
            Console.WriteLine("true");


        }
        Console.ReadLine();
0 голосов
/ 17 июня 2011

Нет способа сделать это, но вы, безусловно, можете сделать диапазон, используя if( index >=7 && index <= 8 ).Но предоставление ему списка чисел потребует от вас создания массива или объекта списка, а затем использования метода для этого.Но это просто излишество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...