2013-04-05 59 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