编写switch语句时,在case语句中可以打开的内容似乎有两个限制。
例如(是的,我知道,如果您正在做这种事情,则可能意味着您的object-oriented(OO)体系结构很不稳定-这只是一个虚构的示例!),
Type t = typeof(int);
switch (t) {
case typeof(int):
Console.WriteLine("int!");
break;
case typeof(string):
Console.WriteLine("string!");
break;
default:
Console.WriteLine("unknown!");
break;
}
在这里,switch()语句以“期望整数类型的值”失败,而case语句以“期望常数的值”失败。
为什么要设置这些限制?其基本依据是什么?我看不出为什么switch语句只必须屈服于静态分析,以及为什么打开的值必须是整数(即原始)的任何原因。理由是什么?
最佳答案
这是我的原始帖子,引发了一些争论... ,因为它是错误的:
实际上,C#switch语句是而不是始终是恒定的时间分支。
在某些情况下,编译器将使用CIL switch语句,该语句实际上是使用跳转表的恒定时间分支。但是,在Ivan Hamilton指出的稀疏情况下,编译器可能会完全生成其他内容。
实际上,通过编写各种C#switch语句(有些稀疏,有些密集)并使用ildasm.exe工具查看生成的CIL,可以很容易地验证这一点。
关于c# - C#switch语句限制-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44905/