You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多播委托返回double类型时,如何获取所有方法的返回结果?

带返回值的多播委托获取所有结果的实现

C#的多播委托调用时会依次执行所有绑定的方法,但仅返回最后一个执行方法的返回值,这是默认行为。不过你完全可以获取每个关联方法的返回结果,具体实现如下:

实现方式:遍历委托调用列表

通过GetInvocationList()方法可以获取多播委托中所有绑定的委托实例,逐个调用这些实例并收集返回值即可。

修改你的代码示例:

class Program
{
    public delegate double rectangleDelegate(double Width, double Heigth);
    class Rectangle
    {
        public double GetPerimeter(double Width, double Heigth)
        {
            return 2 * (Width + Heigth);
        }
        public double GetArea(double Width, double Heigth)
        {
            return Width * Heigth;
        }
    }
    static void Main(string[] args)
    {
        Rectangle rectangle = new Rectangle();

        rectangleDelegate obj = rectangle.GetArea;
        obj += rectangle.GetPerimeter;

        // 初始化列表存储所有返回值
        var results = new List<double>();
        // 遍历调用列表中的每个委托
        foreach (rectangleDelegate singleDel in obj.GetInvocationList())
        {
            results.Add(singleDel(4, 2));
        }

        // 输出所有结果
        foreach (var res in results)
        {
            Console.WriteLine(res);
        }
    }
}

关于设计思路的说明

这种需求完全符合多播委托的设计逻辑——多播委托的核心是批量触发方法,默认返回最后一个值只是针对简单场景的简化设计。当需要收集所有返回值时,手动遍历调用列表是官方认可的标准做法,完全合理。

内容的提问来源于stack exchange,提问作者Hr.Panahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:34:58