0

我尝试转换为具有浮点隐式转换器的浮点匿名类对象。我不确定我是否解释正确。这是示例:

我有以下课程:

public class MyFloat 
{        
    public float Value { get; set; }

    public MyFloat(float val)
    {
        Value = val;
    }

    public static implicit operator MyFloat(float v) 
    {
        return new MyFloat(v);
    }

    public static implicit operator float(MyFloat d) 
    {
        return d.Value;
    }

然后,如果我尝试:

object f1 = new MyFloat(5.0f);
float f2 = f1; // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
float f3 = (MyFloat)f1; 

我得到 InvalidCastException。我假设 f1 被视为对象,并且不检查它的真实类型(MyFloat)是否具有隐式浮点转换器。有没有办法解决这个问题?

提前致谢

4

2 回答 2

1

不要使用objectbut MyFloat,否则编译器在编译时不知道你object的类型是 MyFloat

代替:

object f1 = new MyFloat(5.0f);
float f2 = f1; // Unhandled Exception: System.InvalidCastException: Specified cast is not 

这个:

MyFloat f1 = new MyFloat(5.0f);
float f2 = f1;  

或相应地转换它(尽管这似乎是多余的):

float f2 = (MyFloat)f1
于 2013-09-27T09:36:24.687 回答
0

就像你说的那样,这里的问题f1是被视为object,而不是MyFloat- 你需要将它从objectback to 转换为MyFloat然后隐式转换将起作用(就像你的第二个例子一样)。

或者,不要将其声明为object开头并使用它的真实类型 - MyFloat

于 2013-09-27T09:36:42.217 回答