Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengatasi Kekurangan Kekangan Generik Enum dalam C#?

Bagaimanakah Saya Boleh Mengatasi Kekurangan Kekangan Generik Enum dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-19 06:02:08651semak imbas

How Can I Work Around the Lack of Enum Generic Constraints in 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:

  • Termasuk
  • Mengandungi
  • HasFlag (atau HasFlags)
  • IsSet

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!

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