匿名对象的隐式类型转换

时间:2013-09-27 09:33:47

标签: c# type-conversion

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

我有以下课程:

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)具有隐式到浮点转换器。 有没有办法解决这个问题?

提前致谢

2 个答案:

答案 0 :(得分:1)

不要使用object而是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

答案 1 :(得分:0)

此处的问题与您说的一样,f1被视为object,而不是MyFloat - 您需要将其从object转发回MyFloat然后隐式演员会工作(就像你的第二个例子)。

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