关于C#:If else if与switch

If else if or Switch case

本问题已经有最佳答案,请猛点这里访问。

在考虑性能时,哪一个更好否则,如果或开关盒

重复:在C中使用if/else和switch case有什么显著区别吗?


对于可读性和感知,使用switch语句而不是加载if语句。

switch语句速度稍快,不过:

http://www.blackwasp.co.uk/speedtestifelswitch.aspx(首次点击谷歌)

编译器可以优化switch语句,因此如果您有超过3个或4个不同的情况,可以使用


你在打开什么?如果要打开一个字符串,C编译器要么将其转换为字典,要么将其转换为一系列if/else检查。哪个更快取决于所讨论的字符串(包括候选字符串)。

如果您要打开整数值,我相信C编译器总是使用IL switch语句-但根据所涉及的值,这可能比if/else序列快,也可能不快。(如果它们在一个大的连续块中,clr就可以跳转到表中的正确位置-如果它们非常不同,我怀疑这没有帮助。)

这仅仅是一个空闲查询,还是您真的在这个级别上进行了微优化?在绝大多数情况下,任何性能差异都是无关紧要的——为了可读性而写。


这更像是一个风格问题,而不是性能问题。在我看来,任何绩效差异都是可以消除的。另请参阅https://stackoverflow.com/questions/395618/ifelse-vs-switch。


很棘手的是,您必须运行测试,因为if和switches会导致不同的il代码。

人们希望它们是相同的。


在解决性能问题时,必须使用实际数据来衡量差异。从推测的角度来看,您询问它的事实表明您没有实际的性能问题需要处理,因此您应该担心哪个更可读/可维护。


我已经读到switch语句可以稍微快一点。


如果您使用int/string/etc,那么switch有一些更复杂的跳转选项,如果您有很多条件,这些选项可能会使switch更高效。但是,差异不大可能很大,并且switch不是所有类型(仅基于整数和字符串)的选项。