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

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

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


当前回答

根据这个链接,使用Switch和IF语句的迭代测试的IF和Switch比较,就像对于1,000,000,000次迭代,Switch语句花费的时间= 44.3秒,IF语句花费的时间= 48.0秒

也就是每秒20833333次迭代,所以,我们真的需要更专注吗,

附注:只是为了了解在少量条件下的性能差异。

其他回答

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

我的计算机教授建议你不要切换语句,因为人们经常忘记断点或错误地使用它。我记不清他到底说了什么,但沿着这条线看了一些开创性的代码库,其中显示了switch语句的例子(几年前),其中也有大量的错误。

根据这个链接,使用Switch和IF语句的迭代测试的IF和Switch比较,就像对于1,000,000,000次迭代,Switch语句花费的时间= 44.3秒,IF语句花费的时间= 48.0秒

也就是每秒20833333次迭代,所以,我们真的需要更专注吗,

附注:只是为了了解在少量条件下的性能差异。

我刚刚注意到的是,你可以结合if/else和切换语句!在需要检查先决条件时非常有用。

if (string.IsNullOrEmpty(line))
{
    //skip empty lines
}
else switch (line.Substring(0,1))
{
    case "1":
        Console.WriteLine(line);
        break;
    case "9":
        Console.WriteLine(line);
        break;
    default:
        break;
}

switch语句肯定比if else if语句快。有速度测试,已经提供了对它的黑黄蜂

http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx

——看看吧

但很大程度上取决于你要考虑的可能性,但我尽量使用switch语句。