[英]C# method syntax similar to object initializer
我們有一個擴展方法,它接受一個初始化 object 的操作。 有沒有辦法改進這種調用的語法:
public static T NewRow<T>(this IUow uow, Action<T> action();
// this does internally call
public T NewRow<T>(Action<T> initializer) where T : IBo
{
T bo = NewRow<T>();
initializer.Invoke(bo);
return bo;
}
uow.NewRow<ICustomer>(customer => {
customer.Name = "Zzz";
customer.Info = "Abc"
);
我想也許我可以使用類似於 object 初始化器語法的東西?
uow.NewRow<ICustomer>({
Name: "Zzz",
Info: "Abc"
});
這個想法是在每一行中擺脫customer.* =...
我會很高興任何提示。
信息:
編輯:
T bo = NewRow<T>();
. 實際創建的 object 由框架決定{ Name: myOtherVariable.FirstName }
這樣的初始化程序也應該是可能的一個Action
可以是一切,而不僅僅是一個簡單的分配。 因此,如果客戶選擇進行函數調用,那么這里實際上沒有什么可以捷徑的。 例如看這個:
uow.NewRow<IWhatever>(() => Console.WriteLine("tataaaa"););
所以不,你想要的是不可能的。
但是,您可以創建某種EventsArgs
來保存您的姓名並在您的NewRow
方法中使用這些名稱。 如果所有這些回調實際上應該只是全部的賦值調用,則無需執行任何操作。
uow.NewRow<ICustomer>(new MyArgs {
Name = "Zzz",
Info = "Abc"
});
在NewRow
內:
public T NewRow<T>(MyArgs args) where T : IBo
{
customer.Name = args.Name;
customer.Info = args.Info;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.