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
Linda Hamiltonoriginal
2025-01-03 04:55:45192parcourir

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
}

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.

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;
    }
}

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!

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