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

标签 c# dynamic dynamicobject

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

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

并且在 TryGetMember 中拦截 GetMemberBinder.ReturnType 是对象。我还实现了 TryConvert,想知道是否会调用它来进行转换,但它从未被命中。

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

最佳答案

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

ImpromptuInterface做了一些不同的事情,但是沿着这些思路,因为它也希望有一个根据返回类型而改变的动态实现——只是你必须通过一个接口(interface)来描述动态对象。

关于c# - 确定 DynamicObject 成员访问的预期类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044277/

相关文章:

wpf - 将 WPF Extended Toolkit PropertyGrid 绑定(bind)到字典或其他动态源?

C# 将 DynamicObject 转换为任意类型

c# - 如何使用Xamarin iOS/Android播放简单的音频文件

variables - 是否支持动态变量?

c# - 返回未指定类型的泛型

java - 使用动态缓冲区? java

c# - 从资源加载的程序集引发无法加载文件或程序集

c# - emgucv:C#中的Pan Card不当偏斜检测

c# - 如何创建值为模型属性的 TagHelper(不使用@Model)?