Heim >Backend-Entwicklung >C++ >Wie bekomme ich String -Darstellung von Enum -Werten in C#?

Wie bekomme ich String -Darstellung von Enum -Werten in C#?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-29 08:23:10512Durchsuche

How to Get String Representation of Enum Values in C#?

String -Darstellung eines Enum

Betrachten Sie die folgende Aufzählung:

public enum AuthenticationMethod
{
    FORMS = 1,
    WINDOWSAUTHENTICATION = 2,
    SINGLESIGNON = 3
}

Sie benötigen jedoch die Zeichenfolge "Forms", wenn Sie AuthenticationMethod anfordern. Formulare, nicht die ID von 1.

Das benutzerdefinierte Attribut "StringValue" kann dieses Problem ansprechen:

public class StringValue : System.Attribute
{
    private readonly string _value;

    public StringValue(string value)
    {
        _value = value;
    }

    public string Value
    {
        get { return _value; }
    }

}

Dann können Sie dieses Attribut auf Ihre Aufzählung anwenden:

public enum AuthenticationMethod
{
    [StringValue("FORMS")]
    FORMS = 1,
    [StringValue("WINDOWS")]
    WINDOWSAUTHENTICATION = 2,
    [StringValue("SSO")]
    SINGLESIGNON = 3
}

Um diesen StringValue abzurufen, benötigen Sie Folgendes:

public static class StringEnum
{
    public static string GetStringValue(Enum value)
    {
        string output = null;
        Type type = value.GetType();

        // Look for our 'StringValueAttribute' in the field's custom attributes
        FieldInfo fi = type.GetField(value.ToString());
        StringValue[] attrs = fi.GetCustomAttributes(typeof(StringValue), false) as StringValue[];
        if (attrs.Length > 0)
        {
            output = attrs[0].Value;
        }

        return output;
    }
}

Mit dieser Lösung können Sie den String -Wert für Aufzählungen wie folgt erhalten:

string valueOfAuthenticationMethod = StringEnum.GetStringValue(AuthenticationMethod.FORMS);

. Eine bessere Lösung ist das Typ-Safe-Enum-Muster:

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

}

Für eine explizite (oder implizite) Konvertierung, fügen Sie ein statisches Feld mit Zuordnung hinzu, füllen Sie die Zuordnung im Instanzkonstruktor und fügen Sie einen Benutzer hinzu. Definierter Typ Conversion Operator:

& lt; Pre & gt; private statische Readonly Dictionary & lt; String, AuthenticationMethod & gt; Instance = New Dictionary & lt; String, AuthenticationMethod & gt; ();
Instanz [Name] = this; /pre & gt;

Das obige ist der detaillierte Inhalt vonWie bekomme ich String -Darstellung von Enum -Werten in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn