class EvilSideEffects
{
static void Dump(int x, int y, int z)
{
Console.WriteLine("x={0} y={1} z={2}", x, y, z);
}
static void Main()//滥用实参求值顺序 实参求值顺序
{
int i = 0;
Dump(x: ++i, y: ++i, z: ++i);
i = 0;
Dump(z: ++i, x: ++i, y: ++i);
}
}
用实参求值的副作用
z=1 x=2 y=3
x=2 y=3 z=1
如果代码依赖与特殊的实参求值顺序,则应该引入一些局部变量,在单独的语句中执行相关的
代码。编译器会遵循规范的要求进行工作,引入局部变量可以降低在重构时不经意间引入小bug
的风险。
输出
x=1 y=2 z=3
x=2 y=3 z=1