在类</t,>中正确存储/公开Func <t,tresult =“”>的列表

时间:2012-11-21 03:59:01

标签: c# class delegates lambda

我有一个类需要提供一种方法来注册任意数量的Func<T, TResult>个委托。

稍后在我的课程中,在一系列操作中调用它们。

公开注册这些代表的能力的正确方法是什么?它只是IEnumerable<Func<T, TResult>>IList<Func<T, TResult>>ReadOnlyCollection<Func<T, TResult>>的公共财产吗?

这里是否有一些特定的模式?

更具体一点..

假设一个场景

public class Foo 
{
    public List<Func<Control, Func<bool>>> Conditions { get; set; }
    public void DoWork() 
    {
         foreach (Func<Control, Func<bool>> condition in this.Conditions)
             var result = condition.Invoke(new Control());
    }

}

这是可接受的实施吗?

1 个答案:

答案 0 :(得分:1)

没有足够的信息。这完全取决于您的情况,特别是您想要提供的合同保证(例如保证订单,收集的不变性等)。除非您有特殊要求,否则我建议您使用最简单的版本 - IEnumerable<Func<T, TResult>> - 并将其余部分留给您的实施。这就是我过去所做的。

至于在你的例子中使用List,这没有什么本质上的错误。你可能会发现坚持使用IEnumerable<Func<T, TResult>>很方便,以免超出必要限制自己。 List<T>实施IEnumerable<T>,因此您在初始化时仍然可以使用Conditions = new List<Func<T, TResult>>