DynamicObject隐式转换

Ton*_*elo 5 .net c# casting dynamic-language-runtime dynamic

我有一个DynamicObject的子类,我想为原始类型实现隐式转换,就像DO的显式转换方法TryConvert一样; 也就是说,无需编写多个隐式运算符[type]函数.

用法:

dynamic myDynamicObject = new MyDynamicObject("1");
int sum = 1 + myDynamicObject; // instead of int i = 1 + (int)myDynamicObject;
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果可能,怎么样?

Ale*_*ina 6

这里有几件事情.

首先,您正在执行二进制操作.因此,您还需要覆盖TryBinaryOperation方法.在转换之前,它将首先被调用.然后从TryBinaryOperation方法执行转换.

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

int sum = myDynamicObject + 1;
Run Code Online (Sandbox Code Playgroud)

从我现在看来,订单很重要.我将与DLR团队核实这是一个错误或预期的行为.

更新: 这不是一个错误.要同时支持"1 + myDynamicObject"和"myDynamicObject + 1",您不仅需要TryBinaryOperation,还需要TryBinaryOperationFromRight,这是当前DynamicObject根本没有的.