如何获得Invoke方法的所有结果

时间:2014-04-04 15:36:58

标签: c# .net

我的代表非常简单:

public delegate int Compute(int i, int j);

和一些功能:

static int sum(int x, int y)
{
    return x + y;
}

static int diff(int x, int y)
{
    return x - y;
}

static int times(int x, int y)
{
    return x * y;
}

然后我宣布一个事件为:

public static event Compute e;

主要是我在向事件添加功能:

    e += new Compute(sum);
    e += new Compute(diff);
    e += new Compute(times);

最后我想写下函数的所有结果,所以:

Console.WriteLine(e.Invoke(3,4));

据我所知,Invoke方法正在调用事件中的所有函数。但在我的情况下,我只看到最后添加的函数的结果 - 所以12。如何获得Invoke方法的所有结果?

如果函数没有返回任何类型(它们是void类型)没有问题,但是如果函数返回了某些东西 - 那就是。

2 个答案:

答案 0 :(得分:5)

你必须调用MulticastDelegate.GetInvocationList,这将允许你一次调用一个处理程序:

// TODO: Don't call your event e, and use Func<int, int, int>
foreach (Compute compute in e.GetInvocationList())
{
    int result = compute(3, 4);
    Console.WriteLine("{0} returned {1}", compute.Method.Name, result);
}

答案 1 :(得分:0)

这是设计的。如果要获得所有结果,必须使用GetInvokationList()方法获取委托列表,然后按列表迭代并调用所有委托。