Maison >développement back-end >C++ >Comment reconvertir une description Enum en sa valeur Enum ?

Comment reconvertir une description Enum en sa valeur Enum ?

DDD
DDDoriginal
2025-01-21 21:37:10614parcourir

How to Convert an Enum Description Back to its Enum Value?

Convertir la description de l'énumération en valeur de l'énumération

Dans chaque cas, la valeur de l'énumération doit être récupérée en fonction des propriétés de description associées à l'énumération. Explorons une approche générale pour y parvenir.

Considérons l'exemple suivant où nous avons une méthode d'extension pour obtenir la propriété description d'une énumération :

<code>public static string GetDescription(this Enum value)
{
    // 获取Description属性的实现
}</code>

En utilisant cette méthode, nous pouvons obtenir la description en appelant le code suivant :

<code>string myAnimal = Animal.GiantPanda.GetDescription(); // "Giant Panda"</code>

Plongeons maintenant dans le processus inverse de conversion d’un attribut de description en sa valeur d’énumération correspondante. A cet effet, nous introduisons une méthode d'assistance :

<code>public static T GetValueFromDescription<T>(string description) where T : Enum
{
    // 根据描述检索枚举值的实现
}</code>

Dans cette méthode, nous parcourons les champs de type énumération et utilisons la réflexion pour récupérer leurs DescriptionAttributes :

<code>foreach (var field in typeof(T).GetFields())
{
    // 检查DescriptionAttribute并与提供的描述匹配的逻辑
}</code>

Nous pouvons utiliser le nom du champ comme mécanisme de secours si aucun DescriptionAttribute correspondant n'est trouvé. Enfin, nous convertissons le résultat dans le type d'énumération souhaité :

<code>return (T)field.GetValue(null);</code>

Pour utiliser cette méthode, précisez simplement le type d'énumération et les propriétés de description :

<code>var panda = EnumEx.GetValueFromDescription<Animal>("Giant Panda");</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn