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
DDDasal
2025-01-29 07:46:08960semak imbas

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

Akhirnya, tambahkan pengendali penukaran jenis pengguna -ditentukan:

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

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>

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