Как использовать небезопасные значения в перечислении? - PullRequest
7 голосов
/ 12 апреля 2010

Мне нужно использовать это перечисление в моем приложении C #, но оно не позволит мне использовать эти значения. Когда я указываю тип как uint, я могу использовать значение -1, а когда я указываю int, я не могу использовать последние 2 значения. Есть ли способ использовать ключевое слово unchecked здесь, чтобы позволить мне определить все эти значения? Эти значения поступают из внешнего источника, поэтому я не могу их изменить.

internal enum MyValues : int
{
    value1 = -1,
    value2 = 0,
    value3 = 0x80000000,
    value4 = 0xFFFFFFFF
}

Ответы [ 5 ]

9 голосов
/ 12 апреля 2010

Если вы хотите, чтобы -1 отличалось от 0xFFFFFFFF, вам потребуется тип данных больше 32 бит. Попробуйте long.

3 голосов
/ 11 июня 2011

0xFFFFFFFF - это 32-битное число, поэтому оно должно соответствовать enum: int (Я чувствую, что длинный тип - это излишество :))

Вы пробовали

enum YourEnum : int { /*...*/, value4 = unchecked( (int)0xFFFFFFFF ) };
2 голосов
/ 12 апреля 2010

Одним из способов решения этой проблемы является использование нормальных значений для enum (0, 1, 2, 3) и создание класса или пары методов для преобразования входящих значений в члены enum и т -versa.

2 голосов
/ 12 апреля 2010

Поскольку эти значения выглядят как постоянные, просто создайте статический класс для хранения значений. Кроме того, вы можете использовать любые типы:

public static class MyValues
{
    public const int value1 = -1;
    public const int value2= 0;
    public const int value3 = 0x80000000;
    public const int value4 = 0xFFFFFFFF;
}
1 голос
/ 12 апреля 2010

Может быть, попробовать перечисления ulong вместо int?

...