В С# оператор switch не позволяет случаям распространять диапазоны значений. Мне не нравится идея использовать петли if-else для этой цели, так же есть ли другие способы проверки числовых диапазонов в С#?
Корпус выключателя, диапазон проверки в С# 3.5
Ответ 1
Вы можете использовать HashTable соответственно Dictionary, чтобы создать сопоставление Condition => Action.
Пример:
class Programm
{
    static void Main()
    {
        var myNum = 12;
        var cases = new Dictionary<Func<int, bool>, Action>
        { 
            { x => x < 3 ,    () => Console.WriteLine("Smaller than 3")   } ,
            { x => x < 30 ,   () => Console.WriteLine("Smaller than 30")  } ,
            { x => x < 300 ,  () => Console.WriteLine("Smaller than 300") } 
        };
        cases.First(kvp => kvp.Key(myNum)).Value();
    }
}
Этот метод является общей альтернативой switch, особенно если действия состоят только из одной строки (например, вызова метода).
И если вы фанат псевдонимов типов:
using Int32Condition = System.Collections.Generic.Dictionary<System.Func<System.Int32, System.Boolean>, System.Action>;
...
    var cases = new Int32Condition()
    { 
        { x => x < 3 ,    () => Console.WriteLine("Smaller than 3")   } ,
        { x => x < 30 ,   () => Console.WriteLine("Smaller than 30")  } ,
        { x => x < 300 ,  () => Console.WriteLine("Smaller than 300") } 
    };
		Ответ 2
Неа. Конечно, если диапазоны малы, вы можете использовать
case 4:
case 5:
case 6:
   // blah
   break;
 но кроме этого: нет. Используйте if/else.
Ответ 3
если интервал диапазонов постоянный, вы можете попробовать
        int num = 11;
        int range = (num - 1) / 10; //here interval is 10
        switch (range)
        {
            case 0:
                Console.Write("1-10");
                break; // 1-10
            case 1:
                Console.Write("11-20");
                break; // 11-20
            // etc...
        }
Вывод будет: "11-20" 
если интервал переменный, то используйте if/else
Ответ 4
Нет. По крайней мере, ничего более красивого.
Также нет С# 3.5 только .NET 3.5 и С# 3.0
Ответ 5
Попробуйте что-то вроде этого
 private void ExecuteInRange(Dictionary<Range,Action<int>> ranges)
    {
        foreach (var range in ranges)
        {
            if (range.Key.Value < range.Key.Max && range.Key.Value > range.Key.Max)
                range.Value(range.Key.Value);
        }
    }
public class Range
{
    public int Min { get; set; }
    public int Max { get; set; }
    public int Value { get; set; }
}
		Ответ 6
        int b;
        b = Int32.Parse(textBox1.Text);
        int ans = (100-b)/3; //the 3 represents the interval
        //100 represents the last number
        switch(ans)
        {
           case 0:
                MessageBox.Show("98 to 100");
           break;
           case 1:
                MessageBox.Show("95 to 97");
           break;
           case 2:
                MessageBox.Show("92 to 94");
           break;
           case 3:
                MessageBox.Show("89 to 91");
           break;
           case 4:
                MessageBox.Show("86 to 88");
           break;
           default:
                MessageBox.Show("out of range");
           break;
		Ответ 7
Вложенная-короткая вещь if-else работает, и она чиста.
myModel.Value = modelResult >= 20 ? 5 : modelResult >= 14 ? 4 : modelResult >= 5 ? 3 : modelResult >= 2 ? 2 : modelResult == 1 ? 1 : 0;