C#中的方法参数赋值

Posted

技术标签:

【中文标题】C#中的方法参数赋值【英文标题】:Method parameter assignment in 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)
    
    

【问题讨论】:

【参考方案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的值。

以上是关于C#中的方法参数赋值的主要内容,如果未能解决你的问题,请参考以下文章

C#中的委托事件与接口

c#中函数参数中的this(扩展方法)

c#中函数参数中的this(扩展方法)

C#值参数和引用参数,方法的重载,foreach,数组,以及ref和out的用法

在 C# 中,对 ref 参数的赋值何时有效?

方法的参数传递机制(C#)