Switch case, check ranges in C# 3.5
In C#, the switch
statement doesn't allow cases to span ranges of values. I don't like the idea of using if-else loops for this purpose, so are there any other ways to check numeric ranges in C#?
You can use a HashTable
respectively Dictionary
to create a mapping of Condition => Action
.
Example:
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();
}
}
This technique is a general alternative to switch
, especially if the actions consists only of one line (like a method call).
And if you're a fan of type aliases:
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") }
};
Nope. Of course, if the ranges are small you could use the
case 4:
case 5:
case 6:
// blah
break;
approach, but other than that: no. Use if
/ else
.
if the interval of the ranges is constant, you can try
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...
}
Output would be: "11-20"
if interval is variable then use if/else
上一篇: case / switch语句c#?
下一篇: 切换大小写,检查C#3.5中的范围