Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重写DynamicObject时';s TryInvokeMember(),如何选择要调用的正确重载?_C#_.net_Dynamic Language Runtime_Dynamicobject_Tryinvokemember - Fatal编程技术网

C# 重写DynamicObject时';s TryInvokeMember(),如何选择要调用的正确重载?

C# 重写DynamicObject时';s TryInvokeMember(),如何选择要调用的正确重载?,c#,.net,dynamic-language-runtime,dynamicobject,tryinvokemember,C#,.net,Dynamic Language Runtime,Dynamicobject,Tryinvokemember,当在DynamicObject上重写以下方法时,您将如何实现算法来选择正确的方法重载 bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) 如果此重载问题是由于转发到静态实现的方法造成的。一个解决方案可能是让dlr为您完成工作。开源有一个静态方法,创建所有dlr绑定代码,适当缓存,然后调用它,dlr绑定器执行重载解析。此示例在重载解析中处理命名/可选参数和推断泛型,但是DynamicO

当在
DynamicObject
上重写以下方法时,您将如何实现算法来选择正确的方法重载

bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)

如果此重载问题是由于转发到静态实现的方法造成的。一个解决方案可能是让dlr为您完成工作。开源有一个静态方法,创建所有dlr绑定代码,适当缓存,然后调用它,dlr绑定器执行重载解析。此示例在重载解析中处理命名/可选参数和推断泛型,但是DynamicObject在调用中不公开显式泛型或ref out参数。

这并不简单,因为您必须考虑隐式类型转换和可变长度参数(必须映射到数组).


框架中的类提供了一个如何找到匹配方法的示例。

这对我来说有点不清楚,但是如果调用的成员名称相同,
args
数组将具有不同的长度、不同的类型,或者两者都有。@vcsjones:仅这两个方面,或者更多?有一个bug处理了wayout/ref参数,并且它的修复程序没有进入SP1。我在猜测我自己,认为问题远不止于眼前。