我有一个非常简单的问题。我对 C#中的代表和 Lambda表达式了解甚少。我有代码:
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;
}
}
结果是:
Lambda Expression Called...
Multiply Called...
Increment Called...
7
它显示从调用列表调用的最后一个方法的结果7
。
如何从委托调用列表中获取每个方法的结果?我已经看到了thread,但我无法理解这个想法。如果您能提供我上面提供的代码,我将不胜感激。
谢谢!
答案 0 :(得分:1)
将.NET委托的多播功能用于事件订阅者之外的任何事情都是相当不寻常的(考虑简单地使用集合)。
也就是说,可以让各个代表组成一个多播委托(带有Delegate.GetInvocationList)并依次调用它们,而不是让框架为你做(通过直接调用多播委托) 。这样,就可以检查调用列表中每个成员的返回值。
foreach(del unicastDelegate in myDelegate.GetInvocationList())
{
int j = unicastDelegate(6);
Console.WriteLine(j);
}
输出:
Lambda Expression Called...
36
Multiply Called...
36
Increment Called...
7