C#方法语法类似于对象初始值设定项



我们有一个扩展方法,它接受初始化对象的操作。有没有什么方法可以改进这样一个调用的语法:

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"
);

我想也许我可以使用类似于对象初始化器语法的东西?

uow.NewRow<ICustomer>({ 
Name: "Zzz",
Info: "Abc"
});

这个想法是在每一行中去掉customer.* = ...

我很乐意得到任何小费。

信息:

  • 我们使用的是最新的C#语言版本
  • 解决方案应支持IntelliSense(例如,应向用户建议名称和信息(

编辑:

  • 我不能使用构造函数,因为我只有一个接口。没有类/实现。后面的框架为给定的接口T bo = NewRow<T>();创建对象。创建的实际对象由框架决定
  • { 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;
}

相关内容

  • 没有找到相关文章

最新更新