簡體   English   中英

C# 方法語法類似於 object 初始化程序

[英]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.* =...

我會很高興任何提示。

信息:

  • 我們使用的是最新的C#語言版本
  • 解決方案應支持 IntelliSense(例如,應向用戶建議名稱和信息)

編輯:

  • 我不能使用構造函數,因為我只有一個接口。 沒有類/實現。 后面的框架創建 object 到給定的接口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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM