Để kiểm tra xem ví dụ AB có được đặt không, tôi có thể làm điều này:
if ((chữ & Letters.AB) == Letters.AB)
Có cách nào đơn giản hơn để kiểm tra xem có bất kỳ cờ nào trong hằng số cờ kết hợp được đặt so với sau không?
Điều này kiểm tra rằng cả A và B đều được đặt và bỏ qua xem có bất kỳ cờ nào khác được đặt không.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Kiểm tra này hoặc A hoặc B được thiết lập, và bỏ qua cho dù bất kỳ cờ khác được thiết lập hay không.
Điều này có thể được đơn giản hóa để:
if(letter & Letters.AB)
Đây là C cho các hoạt động nhị phân; nên áp dụng điều này cho 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));
Ngẫu nhiên, việc đặt tên của biến trong ví dụ của câu hỏi là "chữ cái" số ít, có thể ngụ ý rằng nó chỉ đại diện cho một chữ cái duy nhất; mã ví dụ cho thấy rõ rằng đó là một tập hợp các chữ cái có thể và nhiều giá trị được cho phép, vì vậy hãy xem xét đổi tên biến 'chữ cái'.