2010-09-03 124 views
3

给定下面的代码,将Bar(int y)中的方法参数y赋值为x还是1?我意识到它们在逻辑上是等价的,但我想了解赋值操作。C#中的方法参数赋值

class Program 
{ 
    static void Main(string[] args) 
    { 
     var foo = new Foo(); 
     var x = 0; 
     foo.Bar(x = 1); 
    } 
} 

public class Foo 
{ 
    public void Bar(int y) 
    { 
    } 
} 

回答

6

该参数获取赋值的值。

考虑这样的代码:

int x = 0; 
int y = (x = 1); 
x = 42; 
foo.Bar(y); 

Eventhough x改变另一个时间,y仍包含1

+0

所有的好答案,但我发现这是最清晰和简洁。标记为答案。 – 2010-09-03 15:47:50

4

它分配给x=1其结果等于1

3

赋值操作符的结果将被传递给Bar,其中“是被分配到左侧的值”(从Eric Lippert's blog)。

在这种情况下,即int1

0

()中的任何内容都会传递给y,只要它是一个int。

但是我觉得直接回答这个问题,X是实际被传递,而不是1,x等于1,则Y = X = 1。

+1

赋值的结果被传递,而不是'x'的值。 – bdukes 2010-09-03 15:40:29

1

您必须考虑评估顺序。在调用函数之前,需要评估大括号内的任何表达式。然后将结果用作函数调用中的参数。

在你的情况下,x = 1是一个表达式。首先需要对它进行评估(x=1)然后您可以使用结果值x,并将其用作参数bar

它相当于

x = 1 
foo.bar(x) 

你可以看到,如果你看看x调用foo后的值,将进行评估。