如何按照Fluent Builder模式在回调中向上下文添加值

我正在使用Fluent Builder和回调来动态配置上下文。

当前,我有一个PlaneContext类,其中包含一个passengers列表,我想使用方法AddPassenger来填充该列表,例如:

var builder = new PlaneBuilder<PlaneContext>();

builder.AddPlane(plane => plane.Name = "Boeng") 
    .AddPassenger(passenger => passenger.Name = "Robert")
    .AddPassenger(passenger => passenger.Name = "Johnny");

如上所示,我创建了一个PlaneBuilder类来链接此类方法。第一种方法AddPlane可以正常工作,但是链式方法AddPassenger不能按预期工作。我缺乏对代表action<T>Func<T,TResult>的理解,这是一个严重的问题。

这是我尝试过的方法,但是我无法将string隐式转换为Passenger

public PlaneBuilder<T> AddPassenger(Func<Passenger,Passenger> callback)
{
    var passenger = callback(new Passenger());
    _planeContext.Passengers.Add(passenger);
    return this;
}

当前,PlaneBuilder类的外观如下:

class PlaneBuilder<T>
{

    private PlaneContext _planeContext = new PlaneContext();

    public PlaneBuilder<T> AddPlane(action<PlaneContext> callback)
    {
        callback(_planeContext);
        return this;
    }

    public PlaneBuilder<T> AddPassenger(Func<Passenger,Passenger> callback)
    {
        // goal is to create a passenger
        // Add it to the passengers list in PlaneContext
        var passenger = callback(new Passenger());
        _planeContext.Passengers.Add(passenger);
        return this;
    }
}

最后,这是PlaneContext类:

class PlaneContext
{
    public string Name { get; set; }
    public string Model { get; set; }
    public List<Passenger> Passengers { get; set; }
}

简而言之,如何使用回调将乘客添加到PlaneContext

wjli44 回答:如何按照Fluent Builder模式在回调中向上下文添加值

这是如上所述解决我问题的方法:

首先,必须在PlaneContext类中初始化列表,例如:

public List<Passenger> Passengers = new List<Passenger>();

第二,为了将乘客添加到Passengers列表中:创建Passenger类的新实例,将其作为参数传递给callback方法,然后将其添加到passengers列表,如:

public PlaneBuilder<T> AddPassenger(Action<Passenger> callback)
{
    var passenger = new Passenger();
    callback(passenger);
    _planeContext.Passengers.Add(passenger);
    return this;
}
本文链接:https://www.f2er.com/3041174.html

大家都在问