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 ?

Pourquoi la conversion d'un Int en une valeur Enum invalide en C# ne génère-t-elle pas d'exception ?

Linda Hamilton
Libérer: 2025-01-03 04:55:45
original
194 Les gens l'ont consulté

Why Doesn't Casting an Int to an Invalid Enum Value in C# Throw an Exception?

La conversion de Int en valeur Enum invalide ne génère pas d'exception

Considérez le code C# suivant :

enum Beer
{
    Bud = 10,
    Stella = 20,
    Unknown
}
Copier après la connexion

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;
Copier après la connexion

Cependant, le code ci-dessus ne génère pas d'exception et affiche à la place « 50 » sur la console.

Le comportement du NET Framework

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.

Implications et solutions

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;
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal