首頁 > 後端開發 > C++ > 如何有效地表示C#枚舉中的字符串?

如何有效地表示C#枚舉中的字符串?

Linda Hamilton
發布: 2025-01-29 07:45:12
原創
207 人瀏覽過

How Can I Efficiently Represent Strings in C# Enums?

C# 枚舉的字符串表示

在 C# 中,枚舉通常使用數值來表示不同的選項。但是,在某些情況下,您可能更傾向於將有意義的字符串與這些選項關聯起來。

一種方法是使用自定義屬性和字符串檢索方法:

<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>
登入後複製

此方法需要手動應用屬性,並且被認為比較冗長。

另一種方法是考慮類型安全的枚舉模式:

<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>
登入後複製

此模式涉及創建一個類似於枚舉的密封類,其中靜態只讀字段表示每個選項。每個字段都具有字符串表示形式(name)和數值(value)。

對於顯式類型轉換,請考慮添加映射字典和用戶定義的類型轉換運算符:

<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>
登入後複製

這種方法結合了兩種方法的優點:類型安全、方便的字符串表示和用戶定義的類型轉換。

以上是如何有效地表示C#枚舉中的字符串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板