在c#中使用switch语句和if/else语句的优缺点是什么?除了代码的外观,我无法想象有这么大的区别。

是否有任何原因导致最终的IL或相关的运行时性能会有根本的不同?

相关:什么是更快,开关上字符串或elseif上类型?


当前回答

我认为Switch比If条件更快 看看是否有这样一个程序:

写一个程序,输入任意数字(1- 99之间),并检查它在哪个槽a) 1- 9,然后槽1 b) 11 - 19,然后槽2 c) 21-29,然后槽3,直到89-99

然后,如果你有许多条件,但儿子切换情况下,你必须只是类型

开关(no /10) case 0 = 1-9,case 1 = 11-19,以此类推

这将是如此简单

还有很多这样的例子!

其他回答

实际上,switch语句更有效。编译器会将其优化为一个查找表,而使用if/else语句则不行。缺点是switch语句不能与变量值一起使用。

你不能:

switch(variable)
{
   case someVariable:
   break;
   default:
   break;
}

它必须是:

switch(variable)
{
  case CONSTANT_VALUE:
  break;
  default:
  break;
}

我认为,不只是c#,而是所有基于C的语言:因为切换仅限于常量,所以使用“跳转表”可以生成非常高效的代码。C用例实际上是一个很好的老式FORTRAN计算GOTO,但c#用例仍然是针对常量进行测试。

优化器不可能生成相同的代码。考虑,例如,

if(a == 3){ //...
} else if (a == 5 || a == 7){ //...
} else {//...
}

因为这些是复合布尔值,生成的代码必须计算一个值,然后短路。现在考虑一下

switch(a){
   case 3: // ...
    break;
   case 5:
   case 7: //...
    break;
   default: //...
}

这可以编译成

BTABL: *
B3:   addr of 3 code
B5:
B7:   addr of 5,7 code
      load 0,1 ino reg X based on value
      jump indirect through BTABL+x

因为你隐式地告诉编译器它不需要计算OR和相等测试。

在阅读了我面前所有的答案并浏览了所有的网页之后,我可以说switch case语句可以帮助您使您的代码看起来更整洁和易于管理。当我在我的项目中测试时,性能也比else if语句好,因为我必须检查超过10个用例(这可能听起来很奇怪!)

我认为Switch比If条件更快 看看是否有这样一个程序:

写一个程序,输入任意数字(1- 99之间),并检查它在哪个槽a) 1- 9,然后槽1 b) 11 - 19,然后槽2 c) 21-29,然后槽3,直到89-99

然后,如果你有许多条件,但儿子切换情况下,你必须只是类型

开关(no /10) case 0 = 1-9,case 1 = 11-19,以此类推

这将是如此简单

还有很多这样的例子!

switch语句基本上是相等的比较。键盘事件比switch语句有很大的优势,当代码易于编写和阅读时,if elseif语句会,缺少{括号}也可能会带来麻烦。

char abc;
switch(abc)
{
case a: break;
case b: break;
case c: break;
case d: break;
}

如果(theAmountOfApples大于5 && theAmountOfApples小于10)保存苹果,则使用if elseif语句非常适合多个解决方案 否则如果(theAmountOfApples大于10 || theAmountOfApples == 100)出售你的苹果。我不会写c#或c++,但我在学习java之前学过它,它们是很接近的语言。