从委托中的每个方法获取结果

时间:2014-03-01 13:00:26

标签: c# linq delegates func

我正在使用委托来保存一些测试值并返回true / false结果的方法。在得知对委托的调用只返回委托中最后一个方法的结果后,我不确定如何继续。

我想收到委托中所有方法调用的结果列表,或者是否有任何调用返回true。

首先,我尝试用foreach枚举代理,但是没有用。我必须事先将这些方法拉出来

System.Delegate[] methods = int_testers.GetInvocationList();

// Methods in int_testers returns true when a condition is met by the input value

然后使用'methods'

中每个成员的动态调用进行枚举
foreach (var item in ds) {
    if ((bool)item.DynamicInvoke(4))
        return true;
}

但是,我已经读过DynamicInvoke比Invoke更慢(数量级或更多),这是我不愿意做出的权衡。

到目前为止,我发现的替代方案是列出Func<int,bool>并列举这些,

List<Func<int,bool>> methods = ....; // Add the methods into the list

foreach (var method in methods) {
    if(method(4)) {
        return true;
    }
}

虽然这有效,但似乎是代表们要解决的问题。那么,最后,有没有办法从委托中获取结果列表而无需手动模拟委托?

这实际上是在函数术语中使用map函数的结果,但我没有足够的C#经验将这个想法很好地用于我正在做的事情。

我稍微调查了LINQ,看起来它可以使用我概述的第二种方法,虽然在这种情况下我似乎无法使用LINQ和委托。

1 个答案:

答案 0 :(得分:1)

您可以使用Predicate<T>代替委托,使用LINQ的Any()代替for循环:

var methods = new List<Predicate<T>>();

// add methods to list

return methods.Any(x => x(4));