小编典典

在 C# 中使用 if/else 和 switch-case 之间有什么显着区别吗?

all

在 C#中使用switch语句与使用语句的好处/缺点是什么。if/else除了代码的外观之外,我无法想象会有那么大的不同。

产生的 IL 或相关的运行时性能有什么根本不同的原因吗?


阅读 68

收藏
2022-05-20

共1个答案

小编典典

SWITCH 语句仅在调试或兼容模式下生成与 IF 相同的程序集。在发布时,它将被编译成跳转表(通过 MSIL ‘switch’ 语句)- 这是 O(1)。

C#(与许多其他语言不同)还允许打开字符串常量 - 这有点不同。为任意长度的字符串构建跳转表显然是不切实际的,因此大多数情况下这种开关将被编译成 IF
堆栈。

但是,如果条件的数量足以覆盖开销,C# 编译器将创建一个 HashTable 对象,用字符串常量填充它并在该表上进行查找,然后跳转。哈希表查找不是严格的
O(1) 并且具有明显的常数成本,但是如果案例标签的数量很大,它将比比较 IF 中的每个字符串常数要快得多。

综上所述,如果条件数超过5个左右,则优先选择SWITCH而不是IF,否则使用看起来更好的任何东西。

2022-05-20