Maison >développement back-end >C++ >Comment pouvons-nous améliorer la représentation des chaînes des énumérations à l'aide d'énumérations de type et de conversion de type explicite?

Comment pouvons-nous améliorer la représentation des chaînes des énumérations à l'aide d'énumérations de type et de conversion de type explicite?

DDD
DDDoriginal
2025-01-29 07:46:08898parcourir

How Can We Improve String Representation of Enumerations Using Type-Safe Enums and Explicit Type Conversion?

Une alternative de la représentation de la chaîne d'énumération

Le schéma précédent utilise des attributs personnalisés pour récupérer la représentation de la chaîne d'énumération. Bien que la fonction soit valide, elle peut sembler longue. Ce qui suit est une méthode alternative pour utiliser le mode d'énumération sécurisé de type:

Ce modèle définit l'instance explicite de l'énumération, qui contient une représentation de chaîne et de valeur.
<code class="language-csharp">public sealed class AuthenticationMethod
{
    private readonly string name;
    private readonly int value;

    public static readonly AuthenticationMethod FORMS = new AuthenticationMethod(1, "FORMS");
    public static readonly AuthenticationMethod WINDOWSAUTHENTICATION = new AuthenticationMethod(2, "WINDOWS");
    public static readonly AuthenticationMethod SINGLESIGNON = new AuthenticationMethod(3, "SSN");        

    private AuthenticationMethod(int value, string name)
    {
        this.name = name;
        this.value = value;
    }

    public override string ToString()
    {
        return name;
    }
}</code>
Méthode Renvoie le formulaire de représentation de chaîne.

ToString() Conversion de type différent

Afin d'activer la conversion de type explicite, vous pouvez ajouter un membre statique pour la cartographie à la classe:

Remplissez le dictionnaire dans le constructeur de la classe:

<code class="language-csharp">private static readonly Dictionary<string, AuthenticationMethod> instance = new Dictionary<string, AuthenticationMethod>();</code>

Enfin, ajoutez un opérateur de conversion de type défini par l'utilisateur:

<code class="language-csharp">instance[name] = this;</code>

Cela vous permet de convertir explicitement la chaîne en instance

pour rendre le processus de conversion de type plus direct.
<code class="language-csharp">public static explicit operator AuthenticationMethod(string str)
{
    AuthenticationMethod result;
    if (instance.TryGetValue(str, out result))
        return result;
    else
        throw new InvalidCastException();
}</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