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

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

我和DLR团队谈过这件事。 不幸的是,答案是否定的,这些信息不适用于DynamicObject。

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