Pourquoi la conversion d'un int en une valeur d'énumération invalide NE lève PAS d'exception
En C#, les énumérations sont essentiellement des types numériques qui mappent un ensemble de valeurs nommées à des constantes entières. Un aspect intrigant des énumérations est leur capacité à accepter n'importe quelle valeur entière, y compris les valeurs qui se situent en dehors de leur plage définie.
Lorsque vous rencontrez une énumération comme :
enum Beer { Bud = 10, Stella = 20, Unknown }
Vous pouvez vous attendre à ce que le casting un entier qui n'est pas 10, 20 ou Inconnu pour le type Beer lèverait une exception. Cependant, ce n’est pas le cas. La conversion d'un entier non valide en un type Beer entraîne l'attribution de cette valeur entière à la variable enum.
Considérez le code suivant :
int i = 50; var b = (Beer) i; Console.WriteLine(b.ToString());
Lorsque vous exécutez ce code, il génère " 50" à la console. La variable b reçoit la valeur entière 50, ce qui n'est pas une valeur d'énumération valide pour Beer. Cependant, le casting ne fait pas d'exception.
Ce comportement découle d'une décision de conception prise par les créateurs du .NET Framework. Les énumérations sont soutenues par d'autres types de valeur, tels que int, short ou byte. En conséquence, ils peuvent accepter n'importe quelle valeur valide pour ces types de valeur sous-jacents.
Bien que ce comportement puisse être pratique dans certains scénarios, il peut également conduire à des résultats inattendus si vous n'en êtes pas conscient.
Au-delà du comportement par défaut
Pour les situations où vous avez besoin d'une application plus stricte des valeurs d'énumération, il existe des utilitaires et des extensions que vous peut utiliser pour valider et appliquer l'utilisation des valeurs d'énumération définies uniquement. Ces outils peuvent vous aider à éviter les erreurs potentielles et à garantir que vos variables d'énumération ne contiennent que les valeurs prévues.
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!