Func类型的多播委托(带有返回值)?我有以下代码:Funcfunc1=(param)=>{Console.WriteLine("Func1executing");返回“你好”+参数;};Funcfunc2=(param)=>{Console.WriteLine("Func2executing");返回“世界”+参数;};函数funcSum=func1+func2;字符串funcResult=funcSum("!");控制台.WriteLine(funcResult);输出是:Func1executingFunc2executingWorld!求和:FuncfuncSum=func2+func1;给出输出:Func2executingFunc1executingHello!我的初始测试是使用布尔返回类型完成的,返回值也始终由最后一个函数确定。它是否按预期工作?我们不是丢失了其他函数的返回值吗?如果是这样,这些功能的多播委托是否有真实的用例?它是否按预期工作?它至少按规定工作。这是否是您想要的是另一回事:)来自C#5规范的第15.4节-强调我的:通过在序列委托实例中同步调用调用列表中的每个方法来调用其调用列表包含多个条目的方法。每个方法都调用传递给委托实例的同一组参数。如果这样的委托调用包含引用参数(第10.6.1.2节),则每个方法调用将引用同一个变量;调用列表中的一个方法对该变量所做的更改将对调用列表中的下一个方法可见。如果委托调用包含输出参数或返回值,它们的最终值将来自列表中最后一个委托的调用。Next:我们不是在丢失其他函数的返回值吗?是的,就在这一刻。如果是这样,这些功能的多播委托是否有真实的用例?说实话,很少。但是,您可以使用Delegate.GetInvocationList()拆分多播委托:您的大部分问题都已得到解答,但缺少一件事是真实世界的用例。这是一个:async事件处理程序。公共委托任务AsyncEventHandler(对象发送者,EventArgse);公共事件AsyncEventHandlerX;publicasyncTaskOnX(EventArgse){//...var@event=X;if(@event!=null)awaitTask.WhenAll(Array.ConvertAll(@event.GetInvocationList(),d=>((AsyncEventHandler)d)(this,e)));这允许该类的用户简单地编写myobject.X+=async(sender,e)=>{...};但是该对象仍将确保OnX的任务在事件处理程序完成之前不会完成。多播委托将始终返回最后一个函数的结果。因为没有预定义的方式来组合或链接T结果。如果想得到链中的所有结果,试试下面的方法:以上是C#学习教程:MulticastdelegateoftypeFunc(withreturnvalue)?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——varresult="!";foreach(FuncfuncinfuncSum.GetInvocationList()){result=func(result);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
