Maison >développement back-end >C++ >Pourquoi la conversion d'un Int en une valeur Enum invalide en C# ne génère-t-elle pas d'exception ?
Considérez le code C# suivant :
enum Beer { Bud = 10, Stella = 20, Unknown }
En général, on s'attend à ce que la conversion d'un un entier en dehors de la plage d'une énumération, comme celui-ci, lancerait un exception :
int i = 50; var b = (Beer)i;
Cependant, le code ci-dessus ne génère pas d'exception et affiche à la place « 50 » sur la console.
Cela est dû à une décision de conception dans le .NET Framework. Une énumération est soutenue par un autre type de valeur (int, short, byte, etc.) et peut donc avoir n'importe quelle valeur valide pour ces types de valeur.
Pendant ce temps Le comportement peut prêter à confusion, il permet également la création d'énumérations "Bit Flag", où des modèles binaires sont utilisés pour représenter différentes combinaisons d'indicateurs au sein d'une valeur d'énumération. Définir explicitement toutes les combinaisons d'indicateurs possibles serait fastidieux.
Pour résoudre le problème des valeurs d'énumération non définies, il est recommandé d'utiliser des méthodes utilitaires qui échouent rapidement, telles que :
public static class EnumUtil<T> { public static T DefinedCast(object enumValue) { if (!System.Enum.IsDefined(typeof(T), enumValue)) throw new InvalidCastException(enumValue + " is not a defined value for enum type " + typeof(T).FullName); return (T)enumValue; } }
Cette méthode renvoie une exception si la valeur de conversion n'est pas définie pour le type enum.
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!