我有一个类需要提供一种方法来注册任意数量的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());
}
}
这是可接受的实施吗?
答案 0 :(得分:1)
没有足够的信息。这完全取决于您的情况,特别是您想要提供的合同保证(例如保证订单,收集的不变性等)。除非您有特殊要求,否则我建议您使用最简单的版本 - IEnumerable<Func<T, TResult>>
- 并将其余部分留给您的实施。这就是我过去所做的。
至于在你的例子中使用List
,这没有什么本质上的错误。你可能会发现坚持使用IEnumerable<Func<T, TResult>>
很方便,以免超出必要限制自己。 List<T>
实施IEnumerable<T>
,因此您在初始化时仍然可以使用Conditions = new List<Func<T, TResult>>
。