Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengatasi Kekurangan Kekangan Generik Enum dalam C#?
Menyelesaikan masalah kehilangan kekangan generik penghitungan dalam C#
C# tidak mempunyai kekangan generik penghitungan, yang mewujudkan pengehadan apabila membuat kaedah sambungan untuk penghitungan. Walau bagaimanapun, terdapat beberapa penyelesaian.
Pendekatan yang disyorkan ialah menggunakan perpustakaan UnconstrainedMelody. Pustaka membenarkan menentukan kekangan "pseudo" seperti where T : struct, IEnumConstraint
, yang UnconstrainedMelody tukar kepada where T : struct, System.Enum
semasa proses pasca binaan.
Penyelesaian lain ialah melaksanakan fungsi yang diperlukan secara manual. Sebagai contoh, pertimbangkan kaedah IsSet
berikut:
<code class="language-csharp">public static bool IsSet<T>(this T input, T matchTo) where T : struct // 不是枚举约束 { return (input & matchTo) != 0; }</code>
Apabila kaedah ini dipanggil dengan berbilang bendera, ia mungkin tidak memberikan gelagat yang diingini kerana ia hanya menyemak kehadiran satu bendera.
Untuk menyelesaikan masalah ini, anda boleh menentukan kaedah tambahan:
<code class="language-csharp">public static bool HasFlags<T>(this T input, params T[] matchTo) where T : struct // 不是枚举约束 { foreach (var flag in matchTo) { if ((input & flag) == 0) return false; } return true; }</code>
Kaedah ini berulang pada bendera yang ditentukan dan mengembalikan benar hanya jika semua bendera ditetapkan.
Konvensyen Penamaan
Konvensyen penamaan yang sesuai untuk kaedah ini bergantung pada keutamaan. Pilihan yang mungkin termasuk:
Keputusan akhir mungkin berbeza-beza bergantung pada konteks khusus dan penggunaan kaedah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengatasi Kekurangan Kekangan Generik Enum dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!