我有一个类,它有11个属性(大多数是继承的)。我不太喜欢传递11个参数。我知道我可以创建一个ModelBuilder
类并执行以下操作:new ModelBuilder().WithProp1(prop1).WithProp2(prop2).Build();
但是我在想只有一种通用的方法可以接受Func
,然后您可以指定要分配的 Prop :
public Car With<TOut>(Func<Car, TOut> lambda)
{
lambda.Invoke(this);
return this;
}
用法:
var car = new Car()
.With(x => x.VehicleType = "Sedan")
.With(x => x.Wheels = 4)
.With(x => x.Colour = "Pink")
.With(x => x.Model = "fancyModelName")
.With(x => x.Year = "2007")
.With(x => x.Engine = "Large")
.With(x => x.WeightKg = 2105)
.With(x => x.InvoiceNumber = "1234564")
.With(x => x.ServicePlanActive = true)
.With(x => x.PassedQA = false)
.With(x => x.Vin = "blabla");
这似乎有效。我的问题:在实现方面我是否有任何遗漏(除非显而易见-将此方法拖到接口(interface)或帮助程序类中)?我忽略了此实现中可能浮出水面的陷阱吗?
最佳答案
您已经使事情复杂化了,相反,您应该利用对象初始化器语法,该语法更加简单且可读性强。
var car = new Car {
VehicleType = "Sedan",
Wheels = 4,
Colour = "Pink",
...
};
关于C#Lambda Builder模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49816190/