C#委托只写出最后一个方法

Rob*_*Cox 4 c# methods delegates

我有这个代码:

public void myMethod()
{
    int a = 10;
    int b = 20;
    Func<int, int, int> multiplyDelegate;
    multiplyDelegate = Multiply;
    multiplyDelegate += Multiply2;

    Console.WriteLine(multiplyDelegate(a,b));
}

public int Multiply(int x, int y)
{
    return x * y;
}
public int Multiply2(int x, int y)
{
    return x * y + 10;
}
Run Code Online (Sandbox Code Playgroud)

通过运行myMethod,我希望控制台显示两个方法"Multiply"和"Multiply2"的返回值,但只显示方法"Multiply2"的返回值.我在这里做错了什么,或者我误解了代表的概念?根据我所学到的,委托是一系列对方法的引用.

Dmi*_*rov 12

使用代理(C#编程指南):

如果委托具有返回值和/或out参数,则返回调用的最后一个方法的返回值和参数.


Los*_*lue 5

您是对的委托可以存储方法并一次调用多个方法。除非您明确调用它们,否则它将返回最后一个。

使用您的代码,这里是您所有方法集合的显式调用示例。

var results = multiplyDelegate.GetInvocationList().Select(x => (int)x.DynamicInvoke(10, 20));
foreach (var result in results)
    Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

编辑 :

这将适用于 functionFunc而不是Action. 这是一个例子,假设它是一个Action

foreach (Delegate action in multiplyDelegate.GetInvocationList())
{
    action.DynamicInvoke(10, 20);
    // Do Something
}
Run Code Online (Sandbox Code Playgroud)

第二个示例Func也适用。