我正在玩代表和匿名方法,并且遇到了以下代码:
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);
}
我对委托的Invocation列表中所有方法的返回值感兴趣。但是,似乎唯一给出的值来自要附加到委托的最后一个方法。 一种可能的解决方法是输入集合并只将结果添加到集合中。但是,由于委托的返回类型,这似乎不是解决此问题的正确方法。
如何从委托中附加的方法中捕获所有返回值?
答案 0 :(得分:7)
您需要使用MulticastDelegate.GetInvocationList
并分别调用每个代理。例如:
List<int> results = numberGenerator.GetInvocationList()
.Cast<IntegerGenerator>()
.Select(x => x())
.ToList();