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

本文关键字:转换 枚举 整数 是否 | 更新日期: 2023-09-27 18:20:38

我得到了以下枚举:

 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;

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

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

是的,可以将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();
}

来自C#4.0规范:

1.10枚举

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

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

需要注意的另一件事是,允许强制转换枚举基础类型(默认情况下为int)范围内的任何整数值,即使该值没有映射到枚举声明中的某个名称。从1.10枚举:

枚举类型可以接受的值集不受其枚举成员。特别是enum可以强制转换为enum类型,并且是的不同有效值该枚举类型。

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

det.documentStatus = (detallistaDocumentStatus) 42;

即使没有具有值CCD_ 7的枚举名称。

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

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

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

(int)AccountTypes.Open

它将返回我需要的int值,对于上面的情况,它将是2。

det.documentStatus = (detallistaDocumentStatus)3;

以上内容应该可以正常工作。这里唯一需要记住的是,如果您正在为枚举成员分配特定的数字,那么类似的操作可能无法按预期进行。此外,如果您没有显式地为枚举值编号,则枚举成员从零开始索引。

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

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

如果您为枚举成员给定一个显式整数值,如下所示:

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

您可以将它们强制转换为int以获得隐式值。

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

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

ENUM只是命名整数的一种方便方法。ENUM的值可以像int一样进行加法、减法和比较。