Объединение нескольких условных выражений в C #

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

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

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

    Затем…

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

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

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

     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 

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

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

    где Интер определяется как:

      public static bool Between (this int a, int x, int y) { return a >= x && a <= y; } 

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

      if (new List() { 7, 8 }.Contains(index)) 
     switch (GetExpensiveValue()) { case 7: case 8: // do work break; } 

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

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

     if ((new int[]{7,8}).Contains(index)) 

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

    Вам нужно что-то подобное

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