obtenir de la valeur de c # enums

J’ai un enum

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

J’ai besoin d’obtenir la valeur par clé de cette énumération, par exemple lorsque vous choisissez ProductionStatus.Validated doit renvoyer 010. Comment puis-je faire cela?

Juste pour jeter une autre solution là-bas …

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

Avec le formatage:

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

C’est court et simple, et cela retourne une chaîne.

Vous pouvez en tenir compte dans une méthode d’extension si vous le souhaitez

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

Vous pouvez également convertir un int en une valeur enum, comme ceci:

 var status = (ProductionStatus)10; 

bool eq = 010 == 10; ils sont en fait égaux

Si vous souhaitez utiliser des chaînes, utilisez cette méthode.

  static ssortingng EnumToSsortingng(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.ToSsortingng(), enumValue => (int)enumValue); foreach (var enumValue in enumValues) { Console.WriteLine("item: {0}, value: {1}", enumValue.Key, enumValue.Value.ToSsortingng("000"); } 

Vous pouvez obtenir toutes les valeurs et tous les noms d’un enum comme ça.

En général, il existe une classe Enum qui contient un ensemble de méthodes facilitant le travail avec des énumérations.

Ici, si vous voulez convertir une valeur énumérable en entier ou en un autre type, vous pouvez écrire:

 int validatedAsInt = (int) ProductionStatus.Validated 

validatedAsInt contiendra la valeur ProductionStatus.Validated.

Si vous voulez obtenir des nombres comme “010”, vous pouvez écrire:

 ssortingng validatedAsSsortingng = ((int) ProductionStatus.Validated).ToSsortingng("000"); 

Ou:

 ssortingng validatedAsSsortingng = ((int) ProductionStatus.Validated).ToSsortingng("D3"); 

validatedAsSsortingng contiendra “010”.

Voici la classe d’assistance universelle qui effectuera une action inverse – obtenir la clé par valeur de ANY Enum :

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

Et cela fonctionne comme ceci – étant donné que nous avons cet Énum :

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

Donc, pour obtenir l’object Enum ShipmentStatus.Shipped il retournera cet object:

 var enumObject = EnumHelpers.GetEnumObjectByValue(1); 

Donc, fondamentalement, vous pouvez coller n’importe quel object Enum et l’obtenir par valeur:

 var enumObject = EnumHelpers.GetEnumObjectByValue(VALUE);