将'with range'转换为switch语句

时间:2013-03-11 06:19:02

标签: c#-4.0 if-statement .net-4.0 switch-statement

今天有人问我如何将以下if语句转换为切换:

int i=5;
if(i>10)
{
   Do Something;
}
else
{
    Do Something else;
}

我建议假设i是一个只有正值的整数:

int i=5;
switch(i)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10: Do Something else;
    break;
    case default: Do Something;
    break;
}

还有其他更优雅的方式吗?

2 个答案:

答案 0 :(得分:1)

首先,请注意您的两个代码示例(最初编写的)不等效:

  • Do[ing] Something Else示例中的i==10时,您不是switch
  • 但最初的if代码正在检查i>10(而不是i>=10)。
  • 因此case 10:应明确包含在case的{​​{1}}列表中。

为了回答你的问题,我相信某些语言(例如pascal,Objective C,我认为?)允许使用与此类似的范围

Do Something Else

但是C#支持 。请参阅代码讨论中关于案例标签“堆叠”的最后一点MSDN switch(C#)

答案 1 :(得分:1)

在C#中没有直接的方法,您可以尝试以下方法。

int range = (number - 1) / 10;

switch(range)
{
  case 0: 
       Console.WriteLine("1 to 10");
       break;
  case 1:
       Console.WriteLine("11 to 20");
       break;
 //.,......
  default:
       break;
}

不确定它有多清楚,IMO,上述方法会降低代码可读性,如果使用if-else进行范围检查则会更好。此外,只有在范围不变的情况下,上述方法才有效。