obtener valor de c # enums

Tengo una enumeración

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

Necesito obtener valor por clave de esta enumeración, por ejemplo, al elegir ProductionStatus.Validated debería devolver 010. ¿Cómo puedo hacer esto?

Sólo para lanzar otra solución allí …

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

Con el formateo:

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

Eso es corto y simple, y devuelve una cadena.

Puede factorizar eso en un método de extensión si lo desea

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

También puede convertir un int en un valor de enumeración, como este:

 var status = (ProductionStatus)10; 

bool eq = 010 == 10; en realidad son iguales

Si desea utilizar cadenas, utilice este método.

  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"); } 

Puede obtener todos los valores y nombres de una enumeración como tal.

En general, hay una Clase de Enum que contiene una serie de métodos que facilitan el trabajo con enumeraciones.

Aquí, si desea convertir un valor enumerable a un entero u otro tipo, puede escribir:

 int validatedAsInt = (int) ProductionStatus.Validated 

validatedAsInt contendrá el valor de ProductionStatus.Validated.

Si quieres obtener números como “010” puedes escribir:

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

O:

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

validatedAsString contendrá “010”.

Aquí está la clase de ayuda universal que realizará una acción inversa : obtener clave por valor de CUALQUIER Enum :

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

Y funciona así: dado que tenemos este Enum :

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

Entonces, para obtener Enum objeto ShipmentStatus.Shipped esto devolverá este objeto:

 var enumObject = EnumHelpers.GetEnumObjectByValue(1); 

Básicamente, puedes pegar cualquier objeto Enum y obtenerlo por valor:

 var enumObject = EnumHelpers.GetEnumObjectByValue(VALUE);