重写if else进入switch

时间:2013-04-03 12:11:00

标签: c# if-statement switch-statement

我写了一些像这样的 if-else 语句:

   if (workedDays > 0 && workedDays <= 180)
   {
     x= 14;
   }

   if (workedDays > 180 && workedDays <= 540)
   {
     x= 28;
   }

   if (workedDays > 540 && workedDays <= 1068)
   {
     x= 42;
   }
   else
   {
     x= 56;
   }

我试图将其重写为 switch 语句,如下所示:

   switch (workedDays)
   {
     case (workedDays > 0 && workedDays <= 180):
       x=14;
       break;
     default:
       break;
   }

但是,我收到错误Cannot implicitly convert type 'bool' to 'int'

我该如何解决?

5 个答案:

答案 0 :(得分:6)

虽然@Jeroen的switch(true)答案可能有效,但我建议以下内容以获取可读性:

if (workedDays <= 180)
    x = 14;
else if (workedDays <= 540)
    x = 28;
else if (workedDays <= 1068)
    x = 42;
else 
    x = 56;

使用else if构造,无需仔细检查最小值和最大值。

答案 1 :(得分:2)

好吧,我个人不喜欢有这么多if-else-if。

我通常遵循“三个或更多,使用一个!”的想法。

所以,我会这样做: -

class Program
{
  struct Data
  {
    public Data (int l, int u, int v)
    {
      lower = l;
      upper = u;
      value = v;
    }
    public int lower;
    public int upper;
    public int value;
  }

  static void Main (string [] args)
  {
    Data []
      // at the moment, this is coded into the source
      // it can be read from a file at run time instead
      data = { new Data (0, 180, 14), new Data (180, 540, 28), new Data (540, 1068, 42) };

    int
      // again, the default case is hard coded, it too can be loaded from a file
      x = 56,
      workedDays = 100;

    foreach (Data item in data)
    {
      if (workedDays > item.lower && workedDays <= item.upper)
      {
        x = item.value;
        break;
      }
    }
  }
}

然后,您可以从文件中填写数据数组,以便搜索变为运行时可配置,因此您无需重建程序即可更改范围和结果。

答案 2 :(得分:0)

做的:

switch (true)
    {
        case (workedDays > 0 && workedDays <= 180):
            x=14;
            break;
        default:
            break;
    }

答案 3 :(得分:0)

如果你考虑一下你要求编译器做什么,你就会明白为什么你会遇到这个问题。

你正在开启workDays,这可能是一个int:

switch(workedDays:int)
{
   case (workedDays > 0 && workedDays <= 180):

   break;
}

如果您的案例被评估为真或假结果(bool),那么您要求它在整数之间进行选择,但要给它一个bool作为一种可能性!

答案 4 :(得分:0)

你不能。 Switch语句只能与编译时常量一起使用。 See this question