我最近发现委托与事件之间几乎没有区别。实际上,您可以将多个函数“挂钩”到一个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);
这会调用每个“挂钩”函数,并按顺序将每个值分配给x
,x
最后会分配最后一个值。换句话说,输出是:
assigning 6
assigning 5
5
有没有办法检索这些函数调用的所有返回值?
答案 0 :(得分:1)
默认情况下,您只获得最后一个返回值。但是,您可以使用GetInvocationList()
获取所有代理,然后分别调用每个代理。
答案 1 :(得分:1)
您可以遍历对象的Func<int>
方法中的每个GetInvocationList()
:
foreach(Func<int> f in function.GetInvocationList())
{
var y = f();
//y holds the result
}