Get result from Delegate Invocation list
我有一个非常简单的问题。我对C#中的委托和Lambda表达式了解甚少。我有代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Program { delegate int del(int i); static void Main(string[] args) { del myDelegate = Multiply; int j; myDelegate = x => { Console.WriteLine("Lambda Expression Called..."); return x * x; }; myDelegate += Multiply; myDelegate += Increment; j = myDelegate(6); Console.WriteLine(j); Console.ReadKey(); } public static int Multiply(int num) { Console.WriteLine("Multiply Called..."); return num * num; } public static int Increment(int num) { Console.WriteLine("Increment Called..."); return num += 1; } } |
结果是:
1 2 3 4 | Lambda Expression Called... Multiply Called... Increment Called... 7 |
它显示了从调用列表中调用的最后一个方法的结果
如何从委托调用列表中获取每种方法的结果?我看过这个主题,但是我不明白这个主意。如果您可以通过上面提供的代码提供答案,我们将不胜感激。
谢谢!
将.NET委托的多播功能用于事件订阅者之外的其他事情(考虑使用简单的集合)是非常不寻常的。
也就是说,可以获取组成多播委托的各个委托(使用Delegate.GetInvocationList)并依次调用它们中的每一个,而不是让框架为您做这件事(通过直接调用多播委托)。这样,可以检查调用列表中每个成员的返回值。
1 2 3 4 5 | foreach(del unicastDelegate in myDelegate.GetInvocationList()) { int j = unicastDelegate(6); Console.WriteLine(j); } |
输出:
1 2 3 4 5 6 | Lambda Expression Called... 36 Multiply Called... 36 Increment Called... 7 |