在switch语句中,是否有任何方法可以引用被交换的值
本文关键字:引用 交换 方法 任何 语句 switch 是否 | 更新日期: 2023-09-27 18:18:46
我有一个代码块,像
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]
,数字是switch
ed。这似乎可以使它更优雅和最优。我知道,当编译switch
语句时,括号内的值在代码运行并击中switch
语句时被"缓存"。由于该值与eqtn[curidx]
相同,因此可能导致在不同的内存地址中有两个相同的值(对吗?),这将是无用的。
是否有一些等效的this
来引用当前switch
的值,而在switch
块内?
不,因为编译器不会以任何方式为您创建一个可以访问的变量,因此没有办法引用"正在切换的内容"。
编译器是否真的缓存值取决于您无法控制的事情。
如果你需要一个缓存副本,这通常是个好主意,你必须自己创建一个,使用一个变量:
var op = eqtn[curidx];
switch (op)
{
...
这可能是有益的,原因如下:
- 它使代码更容易阅读,你不需要解析和grok一个更大的表达式,看到它实际上是相同的值被打开。
- 它使代码更容易得到正确,你不必冒险复制/粘贴错误并在N-1个地方修复它。
- 计算表达式的行为可能会产生成本,现在只发生一次。