Search code examples
c#named-parametersoperator-precedence

Evaluation order of named parameters


Possible Duplicate:
Are parameters evaluated in order when passed into a method?

Say I have

void foo (int x, int y)

and call it by:

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

Does C# guarantee the evaluation order of x and y in this case?


Solution

  • According to the specification, arguments are always evaluated from left to right. Unfortunately, there are a few bugs in some corner cases in C# 4.0. See Eric Lippert's post at Are parameters evaluated in order when passed into a method? for more details.

    As an aside, this is probably bad practice. If you want to guarantee the order that the arguments are evaluated, capture the result in a local variable first and then pass the results to the consuming method like:

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

    I can't think of a good reason to not do it that way.