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

时间:2011-08-12 17:55:01

标签: c# dynamic dynamicobject

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

dynamic foo = new MyDynamicObject();
int x = foo.IntValue;
int y = (int)foo.IntValue;

TryGetMember拦截GetMemberBinder.ReturnType无论是对象还是对象。我还实现了TryConvert,想知道是否可以调用它进行转换,但它永远不会被命中。

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

1 个答案:

答案 0 :(得分:10)

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

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