考虑到下面的代码,是否会为Bar(int y)中的方法参数y赋值x或1?我意识到它们在逻辑上是等价的,但我想了解赋值操作。
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)
{
}
}
答案 0 :(得分:6)
参数获取赋值的值。
考虑这样的代码:
int x = 0;
int y = (x = 1);
x = 42;
foo.Bar(y);
尽管x
已更改y
,1
仍然包含{{1}}。
答案 1 :(得分:4)
它被分配给x=1
的结果,等于1.
答案 2 :(得分:3)
赋值运算符的结果将传递给Bar
,其中“是分配给左侧的值”(来自Eric Lippert's blog)。
在这种情况下,这是int
值1
。
答案 3 :(得分:1)
您必须考虑评估顺序。在调用函数之前,需要评估大括号内的任何表达式。然后将结果用作函数调用中的参数。
在您的情况下,x = 1
是一个表达式。需要首先对赋值进行评估(x=1)
,然后您可以使用结果值x,并将其用作bar
的参数。
相当于
x = 1
foo.bar(x)
您可以看到,如果您在调用x
后查看foo
的值,就会对其进行评估。
答案 4 :(得分:0)
()中的任何内容都将传递给y,只要它是一个int。
但我想直接回答这个问题,x是实际传递的,而不是1,x等于1,然后y = x = 1.