首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代理错误答案的多播

代理错误答案的多播
EN

Stack Overflow用户
提问于 2022-06-24 08:44:53
回答 1查看 34关注 0票数 0

我想在这些功能之间建立联系。

代码语言:javascript
复制
public delegate double Math_calculation(double num);
static double z = 6;
static void Main(string[] args)
{
  Math_calculation math ;
  Math_calculation math1 = cube, math2 = root, math3 = half;
            
  math = math1;
  math += math2;
  math += math3;
  Console.WriteLine($"solution={math(z)}");
}
public static double root(double x) => z=Math.Sqrt(x);
public static double cube(double x) => z=Math.Pow(x, 3);
public static double half(double x) => z= x / 2;

准确输出:3

预期产出:7.34.(平方吨(216)/2)

EN

回答 1

Stack Overflow用户

发布于 2022-06-24 09:08:58

多播委托的返回值是其调用列表中最后一个成员的返回值。这不是您所期望的功能组合。调用列表中的每个方法都使用相同的z参数调用。(另见this post)

你必须自己做函数组合。例如,如下所示:

代码语言:javascript
复制
var composedDelegate = math.GetInvocationList().Aggregate((del1, del2) => 
    new Math_calculation(x => (double)del2.DynamicInvoke(del1.DynamicInvoke(x)))
);

请注意,以这种方式结束您可以使用的“单播”委托:

代码语言:javascript
复制
Console.WriteLine(((Math_calculation)composedDelegate)(z));
// or
Console.WriteLine(composedDelegate.DynamicInvoke(z));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72741326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档