我知道這個代碼不好,也許這是愚蠢的問題,但任何人都可以解釋爲什麼它以這種方式工作?創建類在行動<T>委託
我有這個簡單的類
public class Customer
{
public string Name { get; set; }
}
而且我有行動的委託下一個方法
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);
一切都會好的。但爲什麼我的第一個實現不起作用? 如果有人向我解釋這一點,我會很感激。
方法實例未取代你,你不能這樣做,從拉姆達內。 – Maarten
'c'是'model'的引用的副本。在分配'c = new ...''c'後,將會引用另一個isntance – Fabio