首頁 >後端開發 >C++ >我們如何使用類型安全枚舉和顯式類型轉換來改善枚舉的字符串表示?

我們如何使用類型安全枚舉和顯式類型轉換來改善枚舉的字符串表示?

DDD
DDD原創
2025-01-29 07:46:08897瀏覽

How Can We Improve String Representation of Enumerations Using Type-Safe Enums and Explicit Type Conversion?

枚舉字符串表示的替代方案

之前的方案使用自定義屬性來檢索枚舉的字符串表示形式。雖然功能有效,但可能顯得冗長。以下是一種使用類型安全枚舉模式的替代方法:

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

這種模式定義了枚舉的顯式實例,包含字符串和數值表示。 ToString() 方法返回字符串表示形式。

顯式類型轉換

為了啟用顯式類型轉換,可以向類中添加一個用於映射的靜態成員:

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

在類的構造函數中填充字典:

<code class="language-csharp">instance[name] = this;</code>

最後,添加一個用戶定義的類型轉換運算符:

<code class="language-csharp">public static explicit operator AuthenticationMethod(string str)
{
    AuthenticationMethod result;
    if (instance.TryGetValue(str, out result))
        return result;
    else
        throw new InvalidCastException();
}</code>

這允許您將字符串顯式轉換為 AuthenticationMethod 實例,使類型轉換過程更直接。

以上是我們如何使用類型安全枚舉和顯式類型轉換來改善枚舉的字符串表示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn