C#中的方法参数赋值

时间:2010-09-03 15:31:41

标签: c# assignment-operator

考虑到下面的代码,是否会为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)
    {
    }
}

5 个答案:

答案 0 :(得分:6)

参数获取赋值的值。

考虑这样的代码:

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

尽管x已更改y1仍然包含{{1}}。

答案 1 :(得分:4)

它被分配给x=1的结果,等于1.

答案 2 :(得分:3)

赋值运算符的结果将传递给Bar,其中“是分配给左侧的值”(来自Eric Lippert's blog)。

在这种情况下,这是int1

答案 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.