是否可以将整数转换为枚举?
可能重复:
在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;
如果没有,我如何使用整数作为索引获取枚举值,我们使用了很多枚举,所以我们想做一些通用的和可重用的
是的,可以将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(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
相同的方式进行比较。
上述就是C#学习教程:是否可以将整数转换为枚举?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1025094.html