在.NET中是否有办法替换比较间隔的代码,如
if (compare < 10)
{
// Do one thing
}
else if (10 <= compare && compare < 20)
{
// Do another thing
}
else if (20 <= compare && compare < 30)
{
// Do yet another thing
}
else
{
// Do nothing
}
通过像switch语句更优雅的东西(我认为在Javascript“case(&lt; 10)”中有效,但在c#中)?有没有其他人发现这段代码也很难看?
答案 0 :(得分:4)
一个简化:因为这些都是 else-if 而不是 if ,所以你不需要检查先前条件的否定。即,这相当于您的代码:
if (compare < 10)
{
// Do one thing
}
else if (compare < 20)
{
// Do another thing
}
else if (compare < 30)
{
// Do yet another thing
}
else
{
// Do nothing
}
答案 1 :(得分:2)
由于您已在第一个compare >= 10
之后确认if
,因此您确实不需要对第二个(或任何其他)if
进行下限测试...
它不漂亮,但switch
最初是通过C中的散列实现的,因此它实际上比if...else if
链更快。这样的实现并不能很好地转化为一般范围,这也是为什么只允许常数情况的原因。
但是,对于您给出的示例,您实际上可以执行以下操作:
switch(compare/10) {
case 0:
// Do one thing
break;
case 1:
// Do another thing
break;
case 2:
// Do yet another thing
break;
default;
// Do nothing
break;
}