首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamicObject隐式转换

DynamicObject隐式转换
EN

Stack Overflow用户
提问于 2010-01-16 08:29:24
回答 2查看 1.2K关注 0票数 6

我有一个DynamicObject的子类,我想实现基本类型的隐式类型转换,类似于DO的显式类型转换方法TryConvert;也就是说,不需要编写多个隐式操作符类型函数。

用法:

代码语言:javascript
复制
dynamic myDynamicObject = new MyDynamicObject("1");
int sum = 1 + myDynamicObject; // instead of int i = 1 + (int)myDynamicObject;

这是可能的吗?如果可能,是如何实现的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-19 03:54:09

这里有几件事正在发生。

首先,您正在执行一个二进制操作。因此,您还需要覆盖TryBinaryOperation方法。它将首先被调用,然后再进行转换。然后,您可以从TryBinaryOperation方法执行转换。

其次,无论出于何种原因,只有在编写如下语句时才会调用TryBinaryOperation:

代码语言:javascript
复制
int sum = myDynamicObject + 1;

从我现在看来,顺序很重要。我将与DLR团队确认这是bug还是有意为之的行为。

更新:这不是一个bug。要同时支持"1 + myDynamicObject“和"myDynamicObject + 1”,您不仅需要TryBinaryOperation,还需要像TryBinaryOperationFromRight这样的东西,而当前的DynamicObject根本不具备这些东西。

票数 6
EN

Stack Overflow用户

发布于 2010-01-21 05:29:42

DLR-team回答了我的问题,说当DO是右边的操作数时,这是不可能的。

引用自他们的回答:“最重要的规则是,动态对象必须是左操作数,因为动态操作协议只适用于该位置的动态对象。”

左侧的隐式类型转换可以通过TryBinaryOperation完成,但为此,您还必须实现受支持的运算符(+,-,...)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2075649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档