首頁 > 後端開發 > C++ > 如何更優雅地獲得C#中的枚舉的字符串表示?

如何更優雅地獲得C#中的枚舉的字符串表示?

Susan Sarandon
發布: 2025-01-29 07:57:09
原創
227 人瀏覽過

How Can I Get the String Representation of an Enum in C# More Elegantly?

優雅地獲取C#枚舉的字符串表示

考慮以下枚舉:

<code class="language-csharp">public enum AuthenticationMethod
{
    FORMS = 1,
    WINDOWSAUTHENTICATION = 2,
    SINGLESIGNON = 3
}</code>
登入後複製

要獲取字符串值(例如“FORMS”而不是ID 1),需要自定義解決方案。雖然現有的基於屬性的方法和字典方法提供了變通方案,但存在更優雅的解決方案。

類型安全枚舉模式

類型安全枚舉模式引入一個密封類,將每個枚舉成員表示為單獨的實例:

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

這種模式具有以下優點:

  • 類型安全:AuthenticationMethod類確保只使用有效值。
  • 清晰簡潔:字符串表示直接與每個成員關聯。
  • 可擴展性:可以添加附加值而不會破壞現有代碼。

顯式類型轉換

如果需要,可以向AuthenticationMethod類添加顯式類型轉換,允許進行字符串到枚舉的轉換(此部分代碼示例中存在問題,需要修正):

<code class="language-csharp">// 修正后的显式类型转换
private static readonly Dictionary<string, AuthenticationMethod> instance = new Dictionary<string, AuthenticationMethod>()
{
    {"FORMS", FORMS},
    {"WINDOWS", WINDOWSAUTHENTICATION},
    {"SSN", SINGLESIGNON}
};

public static explicit operator AuthenticationMethod(string str)
{
    if (instance.TryGetValue(str, out var result))
        return result;
    else
        throw new InvalidCastException();
}</code>
登入後複製

這允許方便地進行轉換,例如:

<code class="language-csharp">AuthenticationMethod method = (AuthenticationMethod)"FORMS";</code>
登入後複製

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

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