3

给定下面的代码,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)
    {
    }
}
4

5 回答 5

6

参数获取赋值的值。

考虑这样的代码:

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

即使x换了一次,y依然包含1

于 2010-09-03T15:38:11.940 回答
4

它分配给x=1等于 1 的结果。

于 2010-09-03T15:33:36.873 回答
3

赋值运算符的结果将被传递给Bar“是分配给左侧的值”(来自Eric Lippert 的博客)。

在这种情况下,这就是intvalue 1

于 2010-09-03T15:34:17.400 回答
1

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

在您的情况下, thex = 1是一个表达式。它需要首先被评估为赋值,(x=1)然后您可以使用结果值 x 并将其用作bar.

它相当于

x = 1
foo.bar(x)

您可以看到,如果您在x调用foo.

于 2010-09-03T15:38:42.667 回答
0

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

但我想直接回答这个问题,x 是实际传递的,而不是 1,x 等于 1,然后 y=x=1。

于 2010-09-03T15:38:05.890 回答