2

我正在玩委托和匿名方法,并遇到了以下代码:

delegate int IntegerGenerator();
static void Main()
{
    IntegerGenerator numberGenerator;

    numberGenerator = () =>
    {
        Console.WriteLine("returns 7");
        return 7;
    };
    numberGenerator += () =>
    {
        Console.WriteLine("returns 3");
        return 3;
    };

    // This will always return 3
    var num = numberGenerator();

    Console.WriteLine("Return value: {0}", num);
}

我对委托的调用列表中所有方法的返回值感兴趣。但是,返回的唯一值似乎来自附加到委托的最后一个方法。一种可能的解决方法是输入一个集合并将结果添加到其中。但是,由于委托的返回类型,这似乎不是解决此问题的正确方法。

如何从委托中的附加方法中捕获所有返回值?

4

1 回答 1

7

您需要分别使用MulticastDelegate.GetInvocationList和调用每个委托。例如:

List<int> results = numberGenerator.GetInvocationList()
                                   .Cast<IntegerGenerator>()
                                   .Select(x => x())
                                   .ToList();
于 2013-10-17T08:31:00.303 回答