IronPython C#隐式运算符在python中不起作用

时间:2012-03-21 23:36:24

标签: casting ironpython implicit-cast

我在IronPython中编写DSL。在C#中重载运算符并使用 它们在python中运行正常,直到你进入赋值(=)运算符。

使用隐式转换重载解决了C#端的问题,但它在python中不起作用。

这是重现错误的最小示例:

class FloatValue
{  
  public FloatValue(float value)     
   {
    this.value = value;
   }

  public static implicit operator FloatValue(float value)
   {
     return new FloatValue(value);
   }

  public float value;
 }

然后我执行:

    FloatValue value = 5.0f  // It works!!!

但在Python中:

# value is already an instance of FloatValue, it comes from somewhere. It's considered 
# an immutable value, so there is no problem with generating a new instance.

value = 5.0  # Assigns the value, but does not work :(

我得到以下异常:

  

预期的FloatValue,浮动

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

Python不支持单精度浮点值。因此,文字 5.0 (在IronPython的情况下)表示为System.Double

您可以将DSL更改为使用双精度,也可以通过添加

隐式转换为float
public static implicit operator FloatValue(double value)
{
    return new FloatValue(Convert.ToSingle(value));
}