确定DynamicObject成员访问的预期类型

Arn*_*sen 11 c# dynamic dynamicobject

是否可以确定动态成员访问期望的类型?我试过了

dynamic foo = new MyDynamicObject();
int x = foo.IntValue;
int y = (int)foo.IntValue;
Run Code Online (Sandbox Code Playgroud)

并且TryGetMember拦截GetMemberBinder.ReturnType是对象的任何一种方式.我还想TryConvert知道是否可以调用它来进行转换,但它永远不会被命中.

是否有一些其他覆盖我缺少让我确定调用者想要什么类型,以便我可以进行适当的转换?

jbt*_*ule 10

在C#中,当使用dynamic时,编译器总是将binder设置为返回对象类型,然后进行第二次动态隐式转换为期望的返回类型.所以在从c#调用DynamicObject时,GetMemberBinder.ReturnType将始终是对象,但是如果你返回另一种带有TryConvert实现的跳板动态对象,你可以得到那种类型,除非用户做var or dynamic变量,然后他们有一个代理,在它变为静态类型之前不会做任何事情.

ImpromptuInterface做了一些不同的事情,但沿着这些方向,因为它还希望有一个基于返回类型改变的动态实现 - 只需要通过接口描述动态对象.