Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengulangi Hanya Set Bendera dalam C# Enum?

Bagaimana untuk Mengulangi Hanya Set Bendera dalam C# Enum?

DDD
DDDasal
2024-12-26 21:53:13417semak imbas

How to Iterate Over Only the Set Flags in a C# Enum?

Membalas Nilai Enum dengan Bendera

Soalan:

Apabila bekerja dengan enum yang menyokong bendera, bagaimanakah seseorang boleh beralih secara khusus ke atas individu, nilai bit tunggal yang ditetapkan dalam pembolehubah tertentu? Adakah mungkin untuk mengelakkan lelaran ke atas keseluruhan enum menggunakan Enum.GetValues?

Jawapan:

Ya, adalah mungkin untuk mengulang nilai bendera individu dalam pembolehubah enum tanpa perlu menghitung keseluruhan enum dan semak sama ada nilai ditetapkan. Ini boleh dicapai menggunakan coretan kod berikut:

static IEnumerable<Enum> GetFlags(Enum input)
{
    foreach (Enum value in Enum.GetValues(input.GetType()))
        if (input.HasFlag(value))
            yield return value;
}

Penjelasan:

  1. Kaedah GetValues ​​mengembalikan tatasusunan semua nilai yang mungkin untuk enum yang ditentukan taip.
  2. Untuk setiap nilai dalam tatasusunan, kaedah HasFlag digunakan untuk menyemak sama ada bendera ditetapkan dalam pemboleh ubah input.
  3. Jika bendera ditetapkan, nilai akan dihasilkan semula daripada kaedah GetFlags.

Dengan menggunakan pendekatan ini, anda boleh mengulang nilai bendera individu dengan cekap daripada pembolehubah enum.

Atas ialah kandungan terperinci Bagaimana untuk Mengulangi Hanya Set Bendera dalam C# Enum?. 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