如何访问以前添加到委托的函数

How to access previous functions added to a delegate

我是委托新手,据我所知,您可以向委托添加两个或更多函数(使用 +=)。但是当你激活一个委托时,它总是会调用最后添加的函数。如果我想调用之前添加的函数怎么办?假设我有:

public static int add(int o1, int o2)
{
   return o1 + o2;
}

public static int multiply(int o1, int o2)
{
    return o1 * o2;
}

public static int minus(int o1, int o2)
{
    return o1 - o2;
}

所以我使用委托(实际上是 Func)来添加所有这些功能。

Func<int, int, int> f;
f = add;
f += multiply;
f += minus;

现在假设我想调用 multiplyadd,我不能这样做,如果我使用:

Console.WriteLine(f(1,2));

只会调用minus

编辑

顺便说一句,我知道可以使用-=删除函数,但是如果函数数量很多,就不方便了。我正在寻找的解决方案是索引(比如在数组中)但是

f[2](5,3) 

好像不行。

这在language specification(强调我的)中明确规定:

Invocation of a delegate instance whose invocation list contains multiple entries proceeds by invoking each of the methods in the invocation list, synchronously, in order. [...] If the delegate invocation includes output parameters or a return value, their final value will come from the invocation of the last delegate in the list.

所以不是其他代表没有被执行。他们是。只是只有最后一个委托的 return 值被 returned。如果其他代表有一些副作用,比如打印到控制台,你就会看到它们。

编辑

如果您想像这样访问代表:

f[2](5,3) 

那么您可能需要 List<Func<int, int, int>> 而不是多播委托。