Các MSDN documentation cho thuộc tính Flag
nói rằng bạn nên:enums Cờ mà không cần sức mạnh của hai giá trị
Xác định hằng liệt kê trong quyền hạn của hai, đó là, 1, 2, 4, 8, và vân vân . Điều này có nghĩa là các cờ riêng lẻ trong việc liệt kê kết hợp hằng số không trùng lặp.
... và tất nhiên tôi luôn cố gắng nhớ điều đó. Tuy nhiên, không có gì thi hành điều đó và nếu bạn chỉ tạo một điều tra theo cách 'cơ bản' như ...
[Flags]
public enum BrokenEnum
{
None,
FirstOption,
SecondOption,
ThirdOption
}
... nó sẽ không hoạt động như mong đợi. Để chống lại điều này, tôi đang tìm một số loại phân tích mã tĩnh (như FxCop) có thể cảnh báo tôi khi một enum giống như một cái ở trên tồn tại trong mã của tôi. Cảnh báo gần nhất mà tôi có thể tìm thấy là 'CA1008: Enums should have zero value' - cũng hữu ích khi thiết kế cờ liệt kê chính xác nhưng không đủ.
Cách tốt nhất để tìm các cờ được thiết kế không chính xác trong mã của tôi là gì? Giải pháp càng tự động càng tốt.
Tôi đoán tôi không nên nghĩ 'bên trong hộp' phân tích mã tĩnh. Một bài kiểm tra đơn vị như thế này khá dễ dàng và cho tôi kết quả gần như giống nhau. –