将枚举转换为整数

5

我有以下枚举类型

public enum TESTENUM
{
    Value1 = 1,
    Value2 = 2
}

我想将它与我拥有的整数变量进行比较,如下所示:

if ( myValue == TESTENUM.Value1 )
{
}

但是为了进行这个测试,我必须将枚举转换为以下类型(或者可能将整数声明为枚举类型):

if ( myValue == (int) TESTENUM.Value1 )
{
}

有没有一种方法可以告诉编译器枚举是一系列整数,这样我就不必进行强制转换或重新定义变量了?
4个回答

12

不行,你需要将枚举值进行强制类型转换。如果你不想进行强制类型转换,则考虑使用一个带有常量 int 值的类:

class static EnumLikeClass
{
    public const int Value1 = 1;
    public const int Value2 = 2;
}

然而,这种方法也存在一些缺点;缺乏类型安全性是使用enum的一个重要原因。


4
谢谢你的投票。只是今天想失去一些分数,还是你有特定的原因想分享一下? - codekaizen
1
+1 好答案。你不仅提供了答案“你需要转换枚举值”,还提供了一个可能适用于 @pm_2 的替代方案。谁给你点了踩应该给出一个理由。也许是因为将类名 TestEnum 用于不是枚举的东西。我们可能永远不会知道。无论如何,这不值得点踩。 - Daniel Dyson
@Daniel - 很好的观点,也许是类名不好。我已经修复了它! - codekaizen
@jmoreno - 不,至少在我的低分水平上不行。这可能是最好的选择! - codekaizen
这正是我在寻找的吗?我不想将枚举转换为整数。 - aked

2

您可以告诉枚举它包含整数:

public enum TESTENUM: int
{
    Value1 = 1,
    Value2 = 2
}

然而,您仍需要手动转换它们。


7
所有枚举默认为整数类型。 - Xavier Poinas
你不必提供“Int”,因为它默认存在。 - Chinjoo

2
记住,在上下文中将枚举值强制转换为整数类型,这正是您告诉编译器“看这里,我知道这个枚举值是整数类型,因此请将其用作整数类型”的方式。

1

没有(不像C++),这是出于类型安全的良好原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接