Func<T> 获取每次调用的结果?

Func<T> get result of every single call?

我最近发现委托和事件之间没有什么区别。事实上,您可以 "hook" 将多个函数合并为一个 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);

这会调用每个 "hooked" 函数,并将每个值依次分配给 x,并且 x 以最后分配的值结束。换句话说,输出是:

assigning 6
assigning 5
5

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

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

Calling delegates individually?

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

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