我有一个多目标
Func<int,int,int> funHandler=Max;
funHandler+=square;
当我执行时
Console.WriteLine(funHandler(10,10));
它返回square
10(即)200。它没有发射Max
。
foreach(var v in funHandler.GetInvocationList())
{
Console.WriteLine(v(10,20));
}
'V'是一个变量,但它像方法一样使用。如何激活委托中的所有方法 调用列表?
答案 0 :(得分:4)
嗯,可能Max
没有副作用,你不能注意到它?执行多播委托时,它返回最后一个委托的结果。
试试这个:
Func<int, int, int> funHandler = (x, y) => { Console.WriteLine(x); return x; };
funHandler += (x, y) => { Console.WriteLine(y); return y; };
int res = funHandler(1, 2);
Console.WriteLine(res);
请参阅?它的工作原理
要使用调用列表,请执行以下操作:
foreach (var v in funHandler.GetInvocationList())
{
((Func<int, int, int>)v)(1, 2);
}
或者:
foreach (Func<int, int, int> v in funHandler.GetInvocationList())
{
v(1, 2);
}
答案 1 :(得分:1)
使用返回内容的委托进行多播对我来说没有多大意义。我猜它会执行所有这些但是丢弃所有结果但只有一个。