1

我写了一些这样的 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'

我该如何解决?

4

5 回答 5

6

虽然switch(true)@Jeroen 的答案可能有效,但为了便于阅读,我建议以下内容:

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

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

于 2013-04-03T12:16:13.220 回答
2

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

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

所以,我会这样做: -

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

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

于 2013-04-03T12:24:37.127 回答
0

做:

switch (true)
    {
        case (workedDays > 0 && workedDays <= 180):
            x=14;
            break;
        default:
            break;
    }
于 2013-04-03T12:13:06.090 回答
0

如果你考虑你要求编译器做什么,你就会明白为什么会出现问题。

您正在打开可能是 int 的工作天数:

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

   break;
}

您的案例被评估为真或假结果(布尔值),因此您要求它在整数之间进行选择,但有可能给它一个布尔值!

于 2013-04-03T12:14:05.270 回答
0

你不能。Switch 语句只能与编译时常量一起使用。看到这个问题

于 2013-04-03T12:16:35.843 回答