我打算使用if语句,但我的作业要求我使用开关。
case 1:
case 2:
case 3:
case 4:
case 5: return income = hours * 5;
case 6:
case 7: return income = hours * 6;
case 8:
case 9:
case 10: return income = hours * 7; ;
case 11:
case 12:
case 13:
case 14:
case 15: return income = hours * 7; ;
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24: return income = hours * 10;
default: return 0;
答案 0 :(得分:1)
您的代码尽可能简洁。运行时的switch
语句实际上是一个跳转表,因此它比一系列if()
语句快得多,即使您将if
语句合并到范围表达式中(例如{{1} }})。如果要覆盖每个案例,if( 1 <= x && x <= 5 )
的{{1}}语句必须完成(这就是为什么你不能将switch
用于非整数值(请注意,case
的{{1}}值是特殊情况。)
我无法看到案例与它返回的被乘数之间存在明显的数学关系,这可以用来大大简化它。但是,您可以重构代码以便在概念上更容易理解 - 我首先删除switch
部分并将其移至仅返回小时费率的独立函数:
switch
仍然,巨大的String
/ income = hours *
块仍然无法读取,即使您以我为保存在垂直空间上所做的样式折叠它(因为C#对空格不敏感)。 / p>
至少在视觉上简化它的一个选择是使用T4进行元编程,这样可以使维护更容易:
int GetHourlyRate(int hours) {
switch( hours ) {
case 1: case 2: case 3: case 4: case 5:
return 5;
case 6: case 7:
return 6;
case 8: case 9: case 10:
return 7;
case 11: case 12: case 13: case 14: case 15:
return 8; // you put 7 in your original example, is that correct and not a typo?
default:
if( hours <= 24 ) return 10;
return 0; // or throw an exception?
}
}
int hourlyRate = GetHourlyRate( hours );
return income = hours * hourlyRate;
...将根据T4文件中定义的switch
列表生成case
。