Как мы знаем, все перечисления скомпилированы как константы , что означает, что вы можете получить неожиданные результаты , если вы используете перечисление из другой сборки.
Установка последовательных числовых чисел в явном виде не поможет, потому что, если вы хотите оставить место для новых значений, вы должны сделать интервал в стиле базового белья, который не имеет значения.
Так что мне стало интересно, как использовать хеш-код имени значения Enum в качестве строки, для чего довольно просто создать сценарий.
Это хорошая идея? Будут ли у меня проблемы с отрицательными значениями, которые может вернуть хэш-код?
EDIT
Для тех, кто спрашивает, почему, я цитирую связанный "угловой случай":
Учитывая сборку с:
enum MyEnum
{
Red,
Blue,
}
если вы используете MyEnum.Red.ToString () в другой сборке, а между тем кто-то перекомпилировал ваше перечисление в:
enum MyEnum
{
Black,
Red,
Blue,
}
во время выполнения вы получите «черный».
(NB, меня здесь не особо интересует ToString, проблема в том, что если вызывающий код запрашивает MyEnum.Red, он фактически ссылается на MyEnum.Black)
Еще один пример, иллюстрирующий проблему с явной последовательной нумерацией:
enum ECountry
{
Afghanistan = 1,
Barbados = 2,
Chile = 3,
...
Zambia = 243,
}
Если Гигглсвик вдруг объявит себя республикой, что вы будете делать?