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

可能重复:
在C#中将int转换为Enum

我得到以下枚举:

public enum detallistaDocumentStatus { ///  ORIGINAL, ///  COPY, ///  REEMPLAZA, ///  DELETE, } 

然后我得到了detallistaDocumentStatus类的类属性:

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

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

那么,有可能像这样投射吗?

 det.documentStatus = (detallistaDocumentStatus)3; 

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

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

也可以将Enumstring ,反之亦然。

 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(myValueAsString, out myValueAsEnumFromString)) { // Put logic here // myValueAsEnumFromString will be Value1 } Console.ReadLine(); } 

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

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

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

 (int)AccountTypes.Open 

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

来自C#4.0规范:

1.10枚举

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

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

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

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

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

 det.documentStatus = (detallistaDocumentStatus) 42; 

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

 det.documentStatus = (detallistaDocumentStatus)3; 

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

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

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

如果为枚举成员提供显式整数值,如下所示:

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

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

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

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

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