Maison >développement back-end >C++ >Comment puis-je représenter efficacement les chaînes en c # ENUMS?

Comment puis-je représenter efficacement les chaînes en c # ENUMS?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-29 07:45:12244parcourir

How Can I Efficiently Represent Strings in C# Enums?

C # La chaîne énumérée indique

En C #, l'énumération utilise généralement une valeur pour représenter différentes options. Cependant, dans certains cas, vous pouvez être plus enclin à s'associer à une chaîne significative à ces options.

Une méthode consiste à utiliser des attributs personnalisés et des méthodes de recherche de chaîne:

<code class="language-csharp">[StringValue("FORMS")]
public enum AuthenticationMethod
{
    FORMS = 1,
    WINDOWSAUTHENTICATION = 2,
    SINGLESIGNON = 3
}

public static class StringEnum
{
    public static string GetStringValue(Enum value)
    {
        // 检索 StringValue 属性,如果找到则返回关联的字符串;否则返回 null。
    }
}</code>
Cette méthode nécessite des attributs d'application manuels et est considéré comme relativement long.

Une autre méthode consiste à considérer le type de mode de levage sûr:

<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>
Ce modèle implique la création d'un joint similaire à l'ascenseur, où le champ de lecture statique représente chaque option. Chaque champ a une forme et une valeur de représentation de chaîne.

Pour la conversion du type de type explicite, envisagez d'ajouter l'opérateur de conversion de type défini par le dictionnaire de mappage et la définition de l'utilisateur:

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

public AuthenticationMethod(int value, string name)
{
    instance[name] = this;
}

public static explicit operator AuthenticationMethod(string str)
{
    if (instance.TryGetValue(str, out AuthenticationMethod result))
        return result;
    else
        throw new InvalidCastException();
}</code>
Cette méthode combine les avantages des deux méthodes: le type de représentation de chaîne sûre et pratique et la conversion de type de la définition de l'utilisateur.

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