내가 코드의 오래 된 조각이 같은 열거있어을에서 int로 :이 열거에 대한 지금컴파일 시간 변환 C#
[Flags]
public enum Example: uint
{
Foo = 0x00000001,
Bar = 0xC0000000
}
, FxCop is complaining는 오히려 필드를 백업하는 것 같이 INT보다 UINT 사용. (그리고 나는이 코드를 가능한 한 깨끗한 FxCop로 가져 오도록 임무를 부여 받았다.) 그러나 열거 형의 상위 비트를 사용하는 기존 열거 형 값이 있는데이 열거 형을 계속 유지하기 때문에 변경할 수 없습니다. 디스크 형식. 나는 이것을 컴파일하려고하면 C# 컴파일러는 당연히 불만 :
error CS0266: Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)
을 그래서,이 대신에 그것을 변경하려고했다 :
[Flags]
public enum Example
{
Foo = 0x00000001,
Bar = (int)0xC0000000
}
을하지만, 내가 의지 할 수있는 긍정적 아니에요 이것은 산술 예외를 던지거나 디스크에 읽거나 쓸 때 올바르게 처리되지 않습니다. 열거 형이 부호없는 int에 의해 뒷받침 될 때 사용한 형식과 일치하는 비트 형식을 여기에 의지 할 수 있습니까?
이것은 모든 FxCop 문제를 해결하지 못할 수도 있습니다. 모든 [Flags]'열거 형에 대해 'None'멤버가 있어야한다고 말하면 놀라지 않을 것입니다. 이것은 코드를 변경할 수없는 이유에 대한 설명과 함께 인라인 경고 억제를위한 아주 좋은 장소 인 것 같습니다. –
@Cody : 네, 그 일을 끝낼 수도 있습니다. –