将if else重写为switch
本文关键字:switch 重写 else if | 更新日期: 2023-09-27 18:07:09
我写了一些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'
.
我该如何修复它?
虽然@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
结构,不需要对最小值和最大值进行双重检查。
嗯,我个人不喜欢有这么多的"如果,否则"。
我通常遵循"三个或更多,使用一个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;
}
}
}
}
然后您可以从文件中填充数据数组,这样搜索就可以在运行时配置,这样您就不需要重新构建程序来更改范围和结果。
如果你考虑一下你要求编译器做什么,你就会明白为什么你会有问题。
你正在切换workkeddays,这可能是一个int类型:
switch(workedDays:int)
{
case (workedDays > 0 && workedDays <= 180):
break;
}
你已经得到了你的情况,被评估为真或假的结果(bool),所以你要求它在整数之间选择,但给它一个bool作为一种可能性!
你不能。Switch语句只能与编译时常量一起使用。参见这个问题
do:
switch (true)
{
case (workedDays > 0 && workedDays <= 180):
x=14;
break;
default:
break;
}