Func <t>获得每次调用的结果吗?</t>

时间:2015-02-17 16:39:18

标签: c# delegates return-value

我最近发现委托与事件之间几乎没有区别。实际上,您可以将多个函数“挂钩”到一个Func<T>中,例如:

Func<int> mFunction;

...

Func<int, int> getValue = value => {
   Console.WriteLine("assigning {0}", value);
   return value;
};
mFunction += () => getValue(6);
mFunction += () => getValue(5);

...

int x = 0;
Func<int> function = mFunction;
if (function != null)
   x = function();
Console.WriteLine(x);

这会调用每个“挂钩”函数,并按顺序将每个值分配给xx最后会分配最后一个值。换句话说,输出是:

assigning 6
assigning 5
5

有没有办法检索这些函数调用的所有返回值?

2 个答案:

答案 0 :(得分:1)

默认情况下,您只获得最后一个返回值。但是,您可以使用GetInvocationList()获取所有代理,然后分别调用每个代理。

请参阅Calling delegates individually?

答案 1 :(得分:1)

您可以遍历对象的Func<int>方法中的每个GetInvocationList()

foreach(Func<int> f in function.GetInvocationList())
{
    var y = f();
    //y holds the result
}