Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat mewakili rentetan dalam C# enums?

Bagaimanakah saya dapat mewakili rentetan dalam C# enums?

Linda Hamilton
Linda Hamiltonasal
2025-01-29 07:45:12282semak imbas

How Can I Efficiently Represent Strings in C# Enums?

c# rentetan enumerated menunjukkan

Dalam C#, penghitungan biasanya menggunakan nilai untuk mewakili pilihan yang berbeza. Walau bagaimanapun, dalam beberapa kes, anda mungkin lebih cenderung untuk mengaitkan dengan rentetan yang bermakna dengan pilihan ini.

satu kaedah adalah menggunakan atribut tersuai dan kaedah carian rentetan:

<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>
Kaedah ini memerlukan atribut aplikasi manual dan dianggap agak panjang.

Kaedah lain adalah untuk mempertimbangkan jenis mod angkat selamat:

<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>
Model ini melibatkan membuat meterai yang serupa dengan lif, di mana medan bacaan statik mewakili setiap pilihan. Setiap medan mempunyai borang perwakilan rentetan dan nilai.

Untuk penukaran jenis jenis eksplisit, pertimbangkan untuk menambah pengendali penukaran jenis yang ditakrifkan oleh kamus pemetaan dan definisi pengguna:

<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>
Kaedah ini menggabungkan kelebihan kedua -dua kaedah: jenis perwakilan rentetan yang selamat dan mudah dan penukaran jenis definisi pengguna.

Atas ialah kandungan terperinci Bagaimanakah saya dapat mewakili rentetan dalam C# enums?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn