我有一个dynamicobject的子类,我想实现原语类型的隐式转换,就像do的显式转换方法tryconvert一样;也就是说,不需要编写多个隐式运算符[类型]函数。
用法:
dynamic myDynamicObject = new MyDynamicObject("1");
int sum = 1 + myDynamicObject; // instead of int i = 1 + (int)myDynamicObject;
有可能吗?如果有,怎么办?
最佳答案
这里发生了几件事。
首先,执行二进制操作。因此,还需要重写TryBinaryOperation方法。在转换之前,它将首先被调用。然后从trybinaryoperation方法可以执行转换。
其次,无论出于什么原因,只有在您编写这样的语句时才会调用trybinaryoperation:
int sum = myDynamicObject + 1;
从我现在看到的情况来看,顺序很重要。我会和dlr团队确认这是一个bug还是一个预期的行为。
更新
不是虫子。要同时支持“1+mydynamicobject”和“mydynamicobject+1”,您不仅需要trybinaryoperation,还需要trybinaryoperationfromright之类的东西,而当前dynamicobject根本没有trybinaryoperation。