如何将Java.Lang.Enum强制转换为整数?

如何将Java.Lang.Enum强制转换为整数?,java,xamarin.android,Java,Xamarin.android,在monodroid中,我有一个返回java.Lang.Enum对象的java绑定 当我试图将这个对象转换为int时,它会抛出 System.InvalidCastException: Cannot cast from source type to destination type. 以下是我在调试器的即时窗口中得到的内容: state {OPENING} base: {Java.Lang.Enum} IsClosed: false IsOpened: false ThresholdClass

在monodroid中,我有一个返回java.Lang.Enum对象的java绑定

当我试图将这个对象转换为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?

您可以使用它返回一个int值,该值表示枚举常量在该类型对象的枚举类定义中的位置

例如,如果枚举类的定义如下:

enum Example {
    Cat, Dog, Fish, Goat
}
然后,
Cat.ordinal()
将返回int值0,
Dog.ordinal()
将返回int值1,
Fish.ordinal()
将返回int值2,依此类推

但是,枚举常量的序数位置不能保证保持不变,因此,如果不确定枚举定义中的更改(这将更改序数值),则不应使用该位置不会中断代码。

您可以使用返回一个int值,该值表示枚举常量在该类型对象的枚举类定义中的位置

例如,如果枚举类的定义如下:

enum Example {
    Cat, Dog, Fish, Goat
}
然后,
Cat.ordinal()
将返回int值0,
Dog.ordinal()
将返回int值1,
Fish.ordinal()
将返回int值2,依此类推


但是,枚举常量的序数位置不能保证保持不变,因此,如果不确定枚举定义中的更改(这将更改序数值),则不应使用该位置不会破坏代码。

在其他语言中使用整数常量的情况下,通常可以在Java中使用枚举,而无需任何转换。看一个基本的枚举教程,看看你可以用它们做的基本事情,值得花2-3个小时。我同意。如果可能,请避免引用枚举常量的序号位置。(遗憾的是,我对Monodroid一无所知,所以我不知道它如何能够利用Java模式。)@Arkanon:我希望枚举序号是0索引的,所以
Cat.ordinal()
将是
0
Fish.ordinal()
将是
2
@LouisWasserman你说得对。我已经更正了上面的答案,因此索引从零开始。在其他语言中使用整数常量的情况下,通常可以在Java中使用枚举,而无需任何转换。看一个基本的枚举教程,看看你可以用它们做的基本事情,值得花2-3个小时。我同意。如果可能,请避免引用枚举常量的序号位置。(遗憾的是,我对Monodroid一无所知,所以我不知道它如何能够利用Java模式。)@Arkanon:我希望枚举序号是0索引的,所以
Cat.ordinal()
将是
0
Fish.ordinal()
将是
2
@LouisWasserman你说得对。我已经更正了上面的答案,所以指数从零开始。