gpt4 book ai didi

c# - 无法在开关 block 中使用只读字段的原因是什么?

转载 作者:行者123 更新时间:2023-11-30 14:24:14 26 4
gpt4 key购买 nike

我很清楚 C# 不允许 switch block 中的 readonly 字段,这就是 this question地址。

我想了解为什么是这种情况。这只是一个任意的语言规范怪癖,还是背后有技术原因?如果是,技术原因是什么?

声明一下,我理解constreadonly的区别,我知道C#switch需要const 值,或编译时已知的值。对我来说,在功能上,使用一堆 if..else if 语句与使用 switch 语句具有相同的结果,因为无论我能用 switch 做什么 语句我也可以用 if 实现,例如:

const int MyConstantValue = 10;

int myCompareValue = 3;
if(myCompareValue == MyConstantValue)
{
//...
}
else
{
//...
}

switch(myCompareValue)
{
case MyConstantValue:
//...
break;
default:
//...
break;
}

这两个构造具有相同的结果:执行 elsedefault block ,但 if 可以在没有编译时间的情况下执行常量或已知值。为什么 if 可以做到 switch 做不到的事情?

最佳答案

这是因为 C# 开关是仿照 C/C++ 开关建模的,它们具有相同的约束。

这个约束有两个原因:

  • 性能:一个 switch 语句可以被编译成一个非常有效的“跳转表”,如果在编译时不知道情况,这是不可能的。
  • 正确性:switch 语句在编译时具有可证明的唯一情况,但没有在编译时无法证明的常量情况。

关于c# - 无法在开关 block 中使用只读字段的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41802830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com