我尝试转换为具有浮动隐式转换器的类的浮动匿名对象。我不确定我是否正确解释。这是一个例子:
我有以下课程:
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)具有隐式到浮点转换器。 有没有办法解决这个问题?
提前致谢
答案 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
。