切换大小写,检查C#3.5中的范围

在C#中, switch语句不允许用例跨越值范围。 我不喜欢为此使用if-else循环的想法,那么有没有其他方法可以检查C#中的数字范围?


您可以分别使用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") } 
    };

不。 当然,如果范围很小,你可以使用

case 4:
case 5:
case 6:
   // blah
   break;

方法,但除此之外:不。 使用if / else


如果范围的间隔是恒定的,你可以尝试

        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

链接地址: http://www.djcxy.com/p/84451.html

上一篇: Switch case, check ranges in C# 3.5

下一篇: How can I use more than one constant for a switch case in C#?