C#4:确定动态调用中的参数传递语义

Fak*_*Jim 5 c# dynamic

在C#4中,当从DynamicObject派生并覆盖TryInvokeMember时,如何确定在调用站点提供的任何参数是否已通过out或ref语义传递?我可以在提供的绑定器中看到包含此​​信息的一些私有字段(即Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder.ArgumentInfo属性),但它似乎无法访问.我认为这些信息必须在某处可用,否则会严重限制一个人对所提供输入的了解.

Ale*_*ina 2

我与 DLR 团队讨论了此事。不幸的是,答案是否定的,此信息不适用于 DynamicObject。

原因是 ref/out 参数非常特定于 C#。动态对象可以在多种语言之间共享,但并非所有语言都有这些符号。DynamicObject 是“按值调用”,因此您的对象可以由不同的 API 使用。