这是您正在使用的极差的编程实践。条件表达式应该不有副作用;他们应该计算值。您正在执行副作用,然后丢弃副作用!您应该(1)制作一个无副作用的版本:
id = (isChar && id > 121) ? 65 : id + 1;
或 (2) 将您的副作用版本写为 statements,而不是 expressions:
if (isChar && id > 121)
id = 65;
else
id++;
让我们更详细地看一下这个简化版的原始错误代码有什么问题:
id = whatever ? 65 : id++;
假设whatever 为假。发生什么了? id++ 在道德上等同于:
int PostIncrement(ref int x)
{
int temp = x;
x = temp + 1;
return temp;
}
假设你这样做了:
id = whatever ? 65 : PostIncrement(ref id);
会发生什么?假设id 是1。你通过引用PostIncrement 来传递它。 PostIncrement 在temp 中复制id -- 1 -- 的值。然后将其加一——2——并将结果分配给id。所以id 现在是 2。然后它返回 1。
回到调用者,id 现在是 2,然后你将 PostIncrement 的结果赋值为 1,现在 id 又是 1。
不要使用id++ 来表示id + 1,因为这根本不是它的意思。