Как известно, все перечисления компилируются как константы, что означает, что вы можете получить неожиданные результаты, если вы используете перечисление из другой сборки.
Настройки последовательных номеров перечислений явно не помогают, потому что, если вы хотите оставить место для новых значений, вам нужно сделать интервал между базовыми линиями, который является naff.
Итак, я задавался вопросом об использовании хэш-кода имени значения Enum в качестве строки, что довольно легко создать script для.
Это хорошая идея? У меня будут проблемы с отрицательными значениями, которые может вернуть hashcode?
ИЗМЕНИТЬ Для тех, кто спрашивает, почему, я цитирую связанный "угловой случай":
Для сборки с помощью:
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,
}
Если Giggleswick вдруг объявляет себя республикой, что вы делаете?