从委托调用列表中获取结果

时间:2014-03-28 07:29:05

标签: c# .net delegates

我有一个非常简单的问题。我对 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,但我无法理解这个想法。如果您能提供我上面提供的代码,我将不胜感激。

谢谢!

1 个答案:

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