0

今天有人问我如何将下面的if语句转换为switch:

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;
}

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

4

2 回答 2

1

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

  • 你不是Do[ing] Something Elsei==10你的switch例子中。
  • 但是原始if代码正在检查i>10(而不是i>=10)。
  • 所以case 10:应该明确地包含在你的cases列表中Do Something Else

为了回答您的问题,我相信某些语言(例如帕斯卡,目标 C,我认为?)允许与此类似的范围:

switch(i)
{
    case 1-10: // or is it "case 1 .. 10" ?
        Do Something else;
        break;
    case default: 
        Do Something;
        break;
}

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

于 2013-03-11T06:23:08.310 回答
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用于范围检查,它会更好。此外,仅当范围恒定时,上述方法才有效。

于 2013-03-11T06:28:25.640 回答