切换大小写,检查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
上一篇: Switch case, check ranges in C# 3.5
下一篇: How can I use more than one constant for a switch case in C#?