2013-09-27 47 views
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)對於浮動轉換器是隱式的。 有什麼辦法可以解決這個問題嗎?

在此先感謝

+2

第二行是否編譯?它看起來不應該是...... –

+0

還請注意,「匿名對象」不是一個有意義的術語。我不知道你的意思...... –

+0

@MrFox但是,然後,浮點運算符的定義是沒有意義的。 –

回答

0

這裏的問題是,像你說的,f1作爲object對待,不能MyFloat - 你需要從object轉換回MyFloat然後隱式強制轉換將會工作(就像你的第二個例子)。

或者,請不要將其聲明爲object以開始並使用它的實際類型 - MyFloat

+0

'var f1'會訣竅嗎? –

+0

@jyparask是的,它會的。 var推斷變量類型。 –

+0

@jyparask是的,但是,'var'只是說「*在這裏使用真實類型*」的簡短方式。 – James

1

不要使用objectMyFloat,否則編譯器不知道在編譯時,你的objectMyFloat類型:

相反的:

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