我有一个类,它有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/

10-09 00:20