执行多播委托

时间:2010-10-14 13:39:53

标签: c# .net delegates

我有一个多目标

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'是一个变量,但它像方法一样使用。如何激活委托中的所有方法 调用列表?

2 个答案:

答案 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)

使用返回内容的委托进行多播对我来说没有多大意义。我猜它会执行所有这些但是丢弃所有结果但只有一个。