是否可以将整数转换为枚举?

时间:2012-01-17 18:09:15

标签: c# .net casting

我得到了以下枚举:

 public enum detallistaDocumentStatus {

    /// <remarks/>
    ORIGINAL,

    /// <remarks/>
    COPY,

    /// <remarks/>
    REEMPLAZA,

    /// <remarks/>
    DELETE,
}

然后我得到了一个类型为detallistaDocumentStatus的类属性:

 public detallistaDocumentStatus documentStatus {
        get {
            return this.documentStatusField;
        }
        set {
            this.documentStatusField = value;
        }
    }

在现实生活中,用户将向我们发送一个数字(1,2,3或4),按照声明的顺序表示每个枚举值。

所以,是否有可能像这样投射?

det.documentStatus = (detallistaDocumentStatus)3;

如果没有,我如何使用整数作为索引来获取枚举值,我们使用了很多枚举,所以我们想要做一些通用的和可重用的

6 个答案:

答案 0 :(得分:47)

是的,可以将Enum转换为int,反之亦然,因为每个Enum实际上每个默认值都由int表示。您应该手动指定成员值。 默认情况下,它从0开始到N.

也可以将Enum投射到string,反之亦然。

public enum MyEnum
{
    Value1 = 1,
    Value2 = 2,
    Value3 = 3
}

private static void Main(string[] args)
{
    int enumAsInt = (int)MyEnum.Value2; //enumAsInt == 2

    int myValueToCast = 3;
    string myValueAsString = "Value1";
    MyEnum myValueAsEnum = (MyEnum)myValueToCast;   // Will be Value3

    MyEnum myValueAsEnumFromString;
    if (Enum.TryParse<MyEnum>(myValueAsString, out myValueAsEnumFromString))
    {
        // Put logic here
        // myValueAsEnumFromString will be Value1
    }

    Console.ReadLine();
}

答案 1 :(得分:13)

是的,这是可能的。我使用以下ENUM

public enum AccountTypes
{
  Proposed = 1,
  Open = 2
}

然后当我调用它时,我用它来获取值:

(int)AccountTypes.Open

它将返回我需要的int值,上面的值为2。

答案 2 :(得分:12)

来自C#4.0规范:

  

1.10枚举

     

使用可以将枚举值转换为整数值,反之亦然   类型演员。例如

int i = (int)Color.Blue;      // int i = 2;
Color c = (Color)2;               // Color c = Color.Blue;

另外需要注意的是,您可以在枚举的基础类型范围内(默认情况下为int)转换任何整数值,即使该值未映射到其中的某个名称也是如此。枚举声明。从1.10 Enums:

  

枚举类型可以采用的值集不受其限制   枚举成员。特别是,基础类型的任何值   枚举可以转换为枚举类型,并且是一个独特的有效值   枚举类型。

因此,您的示例中的枚举也允许以下内容:

det.documentStatus = (detallistaDocumentStatus) 42;

即使没有值为42的枚举名称。

答案 3 :(得分:1)

det.documentStatus = (detallistaDocumentStatus)3;

以上应该可以正常工作。这里唯一要记住的是,如果您要为枚举成员分配特定的数字,那么这样的事情可能无法按预期工作。此外,如果您没有明确地为枚举值编号,那么枚举成员从基于零的索引开始。

因此上面的代码将按照声明的顺序分配枚举的第4个成员。

要检查给定整数是否是该枚举的有效枚举值,请使用Enum.IsDefined

答案 4 :(得分:1)

如果为枚举成员提供显式整数值,请执行以下操作:

public enum Foo
{
    Five=5
    , Six
    , Seven
    , Eight
}

您可以将它们转换为int以获取隐含值。

var bar = (int)Foo.Six: /// bar == 6

如果您没有为至少第一个显式定义值,则将其转换为int将为您提供它在声明中出现的顺序。

答案 5 :(得分:-1)

ENUM只是命名整数的便捷方式。可以添加,减去ENUM的值,并以int的相同方式进行比较。