在处理间隔时,是否有一种优雅的方式来替换像switch这样的东西?

时间:2011-03-18 14:12:58

标签: c# .net switch-statement

在.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#中)?有没有其他人发现这段代码也很难看?

2 个答案:

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