С методом, который принимает Func <T>в Object Builder - PullRequest
4 голосов
/ 17 марта 2011

Я пытаюсь создать Object Builder, чтобы я мог легко создавать объекты для модульного тестирования.Я хотел бы создать метод With (), чтобы я мог передать Func <>, и он установит для меня правильное свойство.

Вот что у меня есть:

public class EquipmentModelBuilder
{

    public EquipmentModel Object { get; set; }

    public EquipmentModelBuilder()
    {
        Object = new EquipmentModel();
    }

    public EquipmentModelBuilder WithCategory(int categoryId)
    {
        Object.EquipmentCategoryID = categoryId;
        return this;
    }

    public EquipmentModelBuilder With(Func<EquipmentModel> setter)
    {
        Object = setter.Invoke();
        return this;
    }

    public EquipmentModel Build()
    {
        return Object;
    }
}

Конечно, WithCategory () работает, но я не хочу создавать все методы для каждого свойства, я хотел бы иметь возможность:

EquipmentModelBuilder.With(x => x.Property1 = 1).With(x => x.Property2 = "2").Build()

Любая идея, что я делаю неправильно?

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Вам нужно использовать Action<EquipmentModel> в качестве аргумента, а не Func<EquipmentModel>.

public EquipmentModelBuilder With(Action<EquipmentModel> setter)
{
    setter.Invoke(this.Object);
    return this;
}
1 голос
/ 17 марта 2011

Я думаю, что Func<EquipmentModel> определяет функцию, которая возвращает EquipmentModel, так что вам нужно было бы Action<EquipmentModel>, которая указывает функцию без возврата, которая принимает EquipmentModel в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...