【问题标题】:Method parameter assignment in C#C#中的方法参数赋值
【发布时间】:2011-04-07 22:14:35
【问题描述】:

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

【问题讨论】:

    标签: c# assignment-operator


    【解决方案1】:

    参数获取赋值的值。

    考虑这样的代码:

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

    即使x 再次更改,y 仍然包含1

    【讨论】:

    • 所有好的答案,但我发现这是最清晰简洁的。标记为答案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在这种情况下,即int1

      【讨论】:

        【解决方案4】:

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

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

        相当于

        x = 1
        foo.bar(x)
        

        如果您在调用foo 后查看x 的值,您可以看到它会被评估。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 通过赋值的结果,而不是x的值。
          猜你喜欢
          • 2012-03-18
          • 2011-02-19
          • 1970-01-01
          • 1970-01-01
          • 2012-04-23
          • 1970-01-01
          • 1970-01-01
          • 2011-02-18
          • 2013-04-10
          相关资源
          最近更新 更多