多播委托返回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
相关产品推荐
相关产品推荐

