2013-04-05 58 views
1

在monodroid中,我有一個返回Java.Lang.Enum對象的java綁定。如何將Java.Lang.Enum轉換爲整數?

當我嘗試將此對象轉換爲int時,它會拋出。

System.InvalidCastException: Cannot cast from source type to destination type. 

這是我得到的調試器的即時窗口:

state 
{OPENING} 
base: {Java.Lang.Enum} 
IsClosed: false 
IsOpened: false 
ThresholdClass: 0x1d200832 
ThresholdType: {System.MonoType} 

我很驚訝的是,一個枚舉不能轉換成一個int?

回答

5

您可以使用java.lang.Enum.ordinal()返回一個int值,該值表示該類型對象的Enum類的定義內的Enum常量的位置。

例如,如果枚舉類的定義是這樣的:

enum Example { 
    Cat, Dog, Fish, Goat 
} 

然後Cat.ordinal()將返回int值0,Dog.ordinal()將返回int值1,Fish.ordinal()將返回int值2,依此上。

但是,Enum常數的序數位置不能保證保持不變,所以如果不確定Enum定義中的變化(它將改變序數值)不會破壞你的碼。

+2

在其他語言中使用整數常量的情況下,通常可以在Java中使用枚舉而不進行任何轉換。值得花2-3個小時來看看基本的枚舉教程,看看你可以用它們做的基本事情。 – arcy 2013-04-05 18:53:07

+0

我同意。如果可能,請避免引用Enum常量的序數位置。 (遺憾的是,我對Monodroid一無所知,所以我不知道如何使用Java模式。) – Bobulous 2013-04-05 18:54:50

+1

@Arkanon:我期望枚舉序列是0索引的,所以'Cat.ordinal()'將是'0','Fish.ordinal()'將是'2'。 – 2013-04-05 21:19:06