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)。
在这种情况下,即int
值1
。
【讨论】:
【参考方案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#中的方法参数赋值的主要内容,如果未能解决你的问题,请参考以下文章