我有一段像
这样的代码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
。这似乎可以使它更优雅和最优。我知道,当编译switch
语句时,paranthesis中的值是" cached"当代码运行并命中switch
语句时。由于该值与eqtn[curidx]
相同,因此可能导致在不同的内存地址中具有两个相同的值(对吗?),这将是无用的。
在this
块内是否有一些等效的switch
来引用当前为switch
的值?
答案 0 :(得分:2)
不,没有办法引用“正在打开的内容”,因为编译器不以任何方式为您创建可以访问的变量。
编译器实际是否缓存值取决于您无法控制的内容。
如果您需要缓存副本,这通常是一个好主意,您将不得不自己使用变量:
var op = eqtn[curidx];
switch (op)
{
...
这可能有益于以下几个原因: