【发布时间】:2017-07-02 20:28:09
【问题描述】:
我知道这段代码不好,也许这是个愚蠢的问题,但谁能解释一下为什么它会以这种方式工作?
我有这个简单的课程
public class Customer
{
public string Name { get; set; }
}
我还有下一个带有 Action 委托的方法
private Customer GetCustomer(Action<Customer> action)
{
var model = new Customer { Name = "Name 1" };
action?.Invoke(model);
return model;
}
然后我用委托执行这个方法并写入控制台model.Name
var model = GetCustomer(c => c = new Customer { Name = "Name 2" });
Console.WriteLine(model.Name);
我希望得到“名称 2”。但我得到“名称 1”——这是在方法内部定义的类的值。我明白为了得到我想要的——我可以这样写代码:
var model = GetCustomer(c => c.Name = "Name 2");
Console.WriteLine(model.Name);
一切都会好起来的。但是为什么我的第一个实现不起作用? 如果有人向我解释这一点,我将不胜感激。
【问题讨论】:
-
方法实例没有被替换,你不能在 lambda 中这样做。
-
c是对model的引用的副本。分配c = new ...后c将引用另一个实例
标签: c#