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
Libérer: 2025-01-29 07:46:08
original
975 Les gens l'ont consulté

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

private static readonly Dictionary<string, AuthenticationMethod> instance = new Dictionary<string, AuthenticationMethod>();
Copier après la connexion

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

instance[name] = this;
Copier après la connexion

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

pour rendre le processus de conversion de type plus direct.
public static explicit operator AuthenticationMethod(string str)
{
    AuthenticationMethod result;
    if (instance.TryGetValue(str, out result))
        return result;
    else
        throw new InvalidCastException();
}
Copier après la connexion

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal