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