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

Bagaimanakah saya dapat mewakili rentetan dalam C# enums?

Linda Hamilton
Lepaskan: 2025-01-29 07:45:12
asal
285 orang telah melayarinya

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:

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

public static class StringEnum
{
    public static string GetStringValue(Enum value)
    {
        // 检索 StringValue 属性,如果找到则返回关联的字符串;否则返回 null。
    }
}
Salin selepas log masuk
Kaedah ini memerlukan atribut aplikasi manual dan dianggap agak panjang.

Kaedah lain adalah untuk mempertimbangkan jenis mod angkat selamat:

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;
    }
}
Salin selepas log masuk
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:

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();
}
Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan