В С# вместо выполнения if(index == 7 || index == 8)
существует ли способ их комбинирования? Я думаю о чем-то вроде if(index == (7, 8))
.
Объединение нескольких условных выражений в С#
Ответ 1
Вы можете выполнить это с помощью метода расширения.
public static bool In<T>(this T obj, params T[] collection) {
return collection.Contains(obj);
}
Тогда...
if(index.In(7,8))
{
...
}
Ответ 2
Вы можете поместить значения, которые вам нужно сравнить, в встроенный массив и использовать метод расширения 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
Ответ 3
В текущем наборе синтаксиса С# нет способа объединить несколько правых операндов, которые будут переданы одному бинарному оператору, насколько мне известно.
Ответ 4
Напишите свои собственные методы расширения, чтобы вы могли писать
if (index.Between(7, 8)) {...}
где Inter определяется как:
public static bool Between (this int a, int x, int y)
{
return a >= x && a <= y;
}
Ответ 5
Вы можете использовать это:
if (new List<int>() { 7, 8 }.Contains(index))
Ответ 6
switch (GetExpensiveValue())
{
case 7: case 8:
// do work
break;
}
Это, очевидно, требует большего количества кода, но это может спасти вас от оценки функции несколько раз.
Ответ 7
if ((new int[]{7,8}).Contains(index))
Ответ 8
Невозможно сделать это, но вы можете сделать диапазон с помощью if( index >=7 && index <= 8 )
. Но, давая ему список чисел, вам потребуется создать массив или объект списка, а затем использовать метод для этого. Но это просто излишнее.
Ответ 9
Вам нужно что-то подобное
int x = 5;
if((new int[]{5,6}).Contains(x))
{
Console.WriteLine("true");
}
Console.ReadLine();