Tôi đã có một enum như thế này trong một mảnh cũ của mã:Compile Thời gian chuyển đổi của uint để int trong C#
[Flags]
public enum Example: uint
{
Foo = 0x00000001,
Bar = 0xC0000000
}
Bây giờ, FxCop is complaining về enum này sử dụng uint chứ không phải là int như nó lĩnh vực sao lưu. (Và tôi đã được giao nhiệm vụ nhận mã này là FxCop sạch nhất có thể ...) Nhưng có một giá trị enum hiện có sử dụng bit thứ tự cao của enum, và tôi không thể thay đổi điều này vì nó đã được tiếp tục tồn tại định dạng trên đĩa. Khi tôi cố gắng biên dịch này, biên dịch C# một cách đúng đắn phàn nàn:
error CS0266: Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)
Vì vậy, tôi sẽ thay đổi nó để thay này:
[Flags]
public enum Example
{
Foo = 0x00000001,
Bar = (int)0xC0000000
}
Tuy nhiên, tôi không tích cực mà tôi có thể dựa về điều này không ném ngoại lệ số học, hoặc không được xử lý một cách chính xác khi được đọc hoặc ghi vào đĩa. Tôi có thể dựa vào định dạng bit ở đây phù hợp với định dạng mà nó được sử dụng khi enum được hỗ trợ bởi một int không dấu?
Điều này có thể không giải quyết được tất cả các sự cố FxCop của bạn. Tôi sẽ không ngạc nhiên nếu nó nói với bạn rằng bạn nên có một thành viên 'None' cho tất cả các enums' [Flags] '. Điều này có vẻ giống như một nơi rất tốt cho một cuộc đàn áp cảnh báo nội tuyến với một bình luận về lý do tại sao bạn không thể thay đổi mã. –
@Cody: Vâng, tôi có thể sẽ làm điều đó. –