Untuk memeriksa apakah misalnya AB diatur, saya dapat melakukan ini:
if ((letter & Letters.AB) == Letters.AB)
Apakah ada cara yang lebih sederhana untuk memeriksa apakah ada flag dari gabungan flag konstan yang ditetapkan daripada yang berikut?
Ini cek yang kedua A dan B ditetapkan, dan pengabaian apakah ada bendera lain yang ditetapkan.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Ini memeriksa apakah A atau B diatur, dan mengabaikan apakah ada flag lain yang diatur atau tidak.
Ini dapat disederhanakan untuk:
if(letter & Letters.AB)
Inilah C untuk operasi biner; harus langsung menerapkan ini ke C #:
enum {
A = 1,
B = 2,
C = 4,
AB = A | B,
All = AB | C,
};
int flags = A|C;
bool anything_and_a = flags & A;
bool only_a = (flags == A);
bool a_and_or_c_and_anything_else = flags & (A|C);
bool both_ac_and_anything_else = (flags & (A|C)) == (A|C);
bool only_a_and_c = (flags == (A|C));
Secara kebetulan, penamaan variabel dalam contoh pertanyaan adalah 'huruf' tunggal, yang mungkin menyiratkan bahwa itu hanya mewakili satu huruf; kode contoh memperjelas bahwa set huruf yang mungkin dan beberapa nilai diperbolehkan, jadi pertimbangkan untuk mengganti nama variabel 'huruf'.