2012-01-25 160 views
0

C#允許你賦值給你的枚舉元素,如C#非整數枚舉和鑄造

public enum Animals 
{ 
    Dog = 0, Cat = 1, 
} 

,你可以投得,並從他們身上,像這樣。

public void demo() 
{ 
    int dog = (int)Animals.Dog; 
    Animals cat = (Animals)(dog++); 
} 

但是C#也可以讓你喜歡這款

public enum Animals 
{ 
    Dog = Vector2.One, Cat = Vector2.Zero, 
} 

事情但是你不能得到的Vector2回進出同一個演員。如

Vector2 dog = (Vector2)Animals.Dog; //this fails 

該問題是否可以解決? *注意Vector2是一個類對象,Vector2.OneVector2.Zero是這樣的靜態聲明。這意味着Dog被分配給內存引用。

+2

此代碼不會編譯 - 「Vector2」必須可轉換爲int(或者,如果您指定了任何其他允許的枚舉類型,這些類型只是整型) – BrokenGlass

+0

Vector2不是類,它是一個結構,一個值類型(假設你正在使用XNA Vector2而不是你自己的實現)。 – smelch

+0

@BrokenGlass嗯,我的Kreskin帽子(http://www.amazingkreskin.com/)也在清潔工! ;-) –

回答

2

,C#語言會讓你做

public enum Animals 
{ 
    Dog = Vector2.One, 
    Cat = Vector2.Zero 
} 

的唯一途徑是,如果有從Vector2爲整型隱式轉換。否則,你會得到一個編譯錯誤。這就是爲什麼你不能投回到Vector2--沒有從int轉換回Vector2DogCat是整數值,並且這些值分別來自隱含投影從Vector2.OneVector2.Zeroint

你可以定義你自己的顯式類型來使它工作,但我猜你將無法以這種方式獲取所有你想要的信息。

+0

這是真的。它通過了預編譯器,而不是編譯器。這現在更有意義。 – ohmusama