Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah kita dapat meningkatkan perwakilan rentetan penghitungan menggunakan enum jenis-selamat dan penukaran jenis eksplisit?

Bagaimanakah kita dapat meningkatkan perwakilan rentetan penghitungan menggunakan enum jenis-selamat dan penukaran jenis eksplisit?

DDD
Lepaskan: 2025-01-29 07:46:08
asal
941 orang telah melayarinya

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

alternatif perwakilan rentetan penghitungan

Skim sebelumnya menggunakan atribut tersuai untuk mendapatkan perwakilan rentetan penghitungan. Walaupun fungsi itu sah, ia mungkin kelihatan panjang. Berikut adalah kaedah alternatif untuk menggunakan mod penghitungan selamat jenis:

Model ini mentakrifkan contoh penghitungan yang jelas, yang mengandungi perwakilan rentetan dan nilai.
<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>
Salin selepas log masuk
Kaedah mengembalikan borang perwakilan rentetan.

ToString() Penukaran Jenis Berbeza

Untuk membolehkan penukaran jenis eksplisit, anda boleh menambah ahli statik untuk pemetaan ke kelas:

isi kamus dalam pembina kelas:

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

Akhirnya, tambahkan pengendali penukaran jenis pengguna -ditentukan:

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

Ini membolehkan anda dengan jelas menukar rentetan ke

contoh untuk membuat proses penukaran jenis lebih langsung.
<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah kita dapat meningkatkan perwakilan rentetan penghitungan menggunakan enum jenis-selamat dan penukaran jenis eksplisit?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan