gpt4 book ai didi

c# - 在 switch 语句中,有什么方法可以引用被切换的值吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:08 24 4
gpt4 key购买 nike

我有一段代码像

switch ( eqtn[curidx] )
{
case Calculator.NOT:
negateNextOp = true;
break;
// CURMODE remains PARSEMODE.OPER
case Calculator.OR:
case Calculator.AND:
case Calculator.XOR:
lastop = eqtn[curidx++]; // Set last operator equal to the one at curidx; increment curidx
CURMODE = PARSEMODE.NUM; // Expecting the next portion of the equation to be a number
break;
default:
throw new Exception(String.Format("At index {0}, encountered character {1} where expected to encounter beginning of operator",
curidx,
eqtn[curidx])
); // Handle unexpected character
}

并且,如您所见,我在 switch 语句中两次引用了 eqtn[curidx],数字被 switched。这似乎可以使它更加优雅和优化。我知道当编译 switch 语句时,括号内的值在代码运行并命中 switch 语句时被“缓存”。由于该值与 eqtn[curidx] 相同,因此可能会导致在不同的内存地址处有两个相同的值(对吗?),这将毫无用处。

switch block 中是否有一些等效的 this 来引用当前被 switched 的值?

最佳答案

不,没有办法引用“正在打开什么”,因为编译器不会以任何方式为您创建一个您可以访问的变量。

编译器是否实际缓存该值取决于您无法控制的事情。

如果你需要一个缓存副本,这通常是个好主意,你将不得不使用变量自己制作一个:

var op = eqtn[curidx];
switch (op)
{
...

这可能有几个好处:

  1. 它使代码更易于阅读,您无需解析和理解更大的表达式即可看到它实际上与正在打开的值相同。
  2. 它使代码更容易得到正确,您不必冒险复制/粘贴错误并稍后在 N-1 个地方修复它。
  3. 评估该表达式的行为可能会产生成本,现在只产生一次。

关于c# - 在 switch 语句中,有什么方法可以引用被切换的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33252105/

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