在 C# 中使用 switch
语句与使用 if/else
语句有什么好处/坏处。除了代码的外观之外,我无法想象会有那么大的不同。
是否有任何原因导致生成的 IL 或相关的运行时性能会截然不同?
相关:What is quicker, switch on string or elseif on type?
最佳答案
SWITCH 语句仅在调试或兼容模式下生成与 IF 相同的程序集。在发布时,它将被编译成跳转表(通过 MSIL 'switch' 语句)- 这是 O(1)。
C#(与许多其他语言不同)也允许打开字符串常量 - 这有点不同。为任意长度的字符串构建跳转表显然是不切实际的,因此大多数情况下这种开关将被编译到 IF 堆栈中。
但是,如果条件的数量足以覆盖开销,C# 编译器将创建一个 HashTable 对象,用字符串常量填充它并在该表上进行查找,然后跳转。哈希表查找不是严格的 O(1) 并且具有明显的常数成本,但是如果 case 标签的数量很大,它会比比较 IF 中的每个字符串常数快得多。
总而言之,如果条件的数量超过 5 个左右,则优先使用 SWITCH 而不是 IF,否则使用看起来更好的任何东西。
关于c# - 在 C# 中使用 if/else 和 switch-case 之间有什么显着区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/395618/