gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:45:15 61 4
gpt4 key购买 nike

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

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/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com