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
}
我最近发现委托和事件之间没有什么区别。事实上,您可以 "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
}