1

我有一个类需要提供一种方法来注册任意数量的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());
    }

}

这是一个可接受的实现吗?

4

1 回答 1

1

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

至于List在您的示例中使用 a as ,本质上没有任何问题。您可能会发现坚持下去很方便,IEnumerable<Func<T, TResult>>以免过度限制自己。List<T>implements IEnumerable<T>,因此您Conditions = new List<Func<T, TResult>>在初始化时仍然可以使用它。

于 2012-11-21T04:11:48.873 回答