命名参数的评估顺序

Tho*_*ing 6 c# named-parameters operator-precedence

可能重复:
在传递给方法时是否按顺序评估参数?

说我有

void foo (int x, int y)

并通过以下方式调用:

foo(y: genNum(), x: genNum())

在这种情况下,C#是否保证x和y的评估顺序?

Pet*_*man 8

根据规范,参数总是从左到右进行评估.不幸的是,在C#4.0的某些极端情况下存在一些错误.请参阅Eric Lippert在Are参数中的帖子,当传递给方法时按顺序进行评估?更多细节.

顺便说一句,这可能是不好的做法.如果要保证参数的计算顺序,请先将结果捕获到局部变量中,然后将结果传递给使用方法,如:

int capturedY = genNum(); //It is important that Y is generated before X!
int capturedX = genNum();
foo(capturedX, capturedY);
Run Code Online (Sandbox Code Playgroud)

我想不出一个不这样做的好理由.