从c#enums中获取价值

我有一个枚举

public enum ProductionStatus { Received = 000, Validated = 010, PlannedAndConverted = 020, InProduction = 030, QAChecked = 040, Delivered = 070, RejectedOrCancelled = 100 } 

我需要从这个枚举中获取键值,例如选择ProductionStatus.Validated它应该返回010.我该怎么做?

只是在那里抛出另一个解决方案……

 ((int)ProductionStatus.Validated).ToString("D3"); 

使用格式:

 ((int)ProductionStatus.Validated).ToString("000", CultureInfo.InvariantCulture); 

这很简单,它返回一个字符串。

如果您愿意,可以将其纳入扩展方法

 public static class ProdStatusExtensions { public static string (this ProductionStatus status) { return ((int)status).ToString ("000", CultureInfo.InvariantCulture); } } 
 var code = (int)ProductionStatus.Validated; 

您还可以将int转换为枚举值,如下所示:

 var status = (ProductionStatus)10; 

bool eq = 010 == 10; 他们实际上是平等的

如果您想使用字符串,请使用此方法。

  static string EnumToString(ProductionStatus val) { switch (val) { case ProductionStatus.Received: return "000"; case ProductionStatus.Validated: return "010"; case ProductionStatus.PlannedAndConverted: return "020"; default: return "Unknown value"; } } 
 var enumValues = Enum.GetValues(typeof(ProductionStatus)).Cast() .ToDictionary(enumValue => enumValue.ToString(), enumValue => (int)enumValue); foreach (var enumValue in enumValues) { Console.WriteLine("item: {0}, value: {1}", enumValue.Key, enumValue.Value.ToString("000"); } 

您可以从枚举中获取所有值和名称。

通常,有一个Enum类 ,它包含一系列方法,便于使用枚举。

在这里,如果要将可枚举值转换为整数或其他类型,可以编写:

 int validatedAsInt = (int) ProductionStatus.Validated 

validatedAsInt将包含ProductionStatus.Validated的值。

如果你想获得像“010”这样的数字你可以写:

 string validatedAsString = ((int) ProductionStatus.Validated).ToString("000"); 

要么:

 string validatedAsString = ((int) ProductionStatus.Validated).ToString("D3"); 

validatedAsString将包含“010”。

这是通用助手类,它将执行反向操作 – 从任何枚举中获取值:

 public static class EnumHelpers { public static T GetEnumObjectByValue(int valueId) { return (T) Enum.ToObject(typeof (T), valueId); } } 

它就像这样 – 假设我们有这个枚举

 public enum ShipmentStatus { New = 0, Shipped = 1, Canceled = 2 } 

因此,要获取Enum对象ShipmentStatus.Shipped这将返回此对象:

 var enumObject = EnumHelpers.GetEnumObjectByValue(1); 

所以基本上你可以粘贴任何Enum对象并按值获取它:

 var enumObject = EnumHelpers.GetEnumObjectByValue(VALUE);