Я не согласен с другими утверждениями ответов
... это не гарантируется ...
... вы не можете полагаться на этом ...
blockquote>, а также с утверждением msdn:
... ваш код приложения никогда не должен зависеть от метода, возвращающего имя определенного члена ...
blockquote>История
В моем программном обеспечении
enum Blabla { A = 0, B = 1, C = 2, D = 3 }
было перечислено значение
AAA
, значение которого изменяется наAA
, а затемAA
изменяется наAAA
. Чтобы сохранить обратную совместимость, мне пришлось делатьenum Blabla { A = 0, AA = 0, AAA = 0, B = 1, C = 2, D = 3 }
. Это позволяет десериализовать значение старого enum (сделанное более старыми версиями программного обеспечения) как
AAA
.Затем был отчет который печатает значение
Blabla
. И в какой-то момент каждый клиент, использующий новую версию, начинает рассказывать мне, что вместоAAA
они видят значениеAA
. Все они видятAA
(и никто из них не видитA
).Что я сделал? Я просто изменяю порядок (пока результат не был
AAA
)enum Blabla { AAA = 0, A = 0, AA = 0, ...}
и сделал тест, чтобы убедиться, что
Blabla.AAA
будет выводиться какAAA
. Проблема решена?Доказательство
Глядя на источники
Enum.ToString()
(илиEnum.GetName()
), он использует GetEnumName () , который вызываетArray.BinarySearch()
для отсортированного массива значений, чтобы найти индекс значения.Результатом двоичного поиска является детерминированный : при условии, что он с теми же параметрами вернет тот же результат.
Итак:
- , если вы не изменяете enum, тогда результат будет таким же.
- можно найти результат экспериментально (или, возможно, понимая, как бинарный поиск работает и как будет обрабатываться enum).
- нет простого правила для определения результата (например, вы не можете сказать, что он всегда возвращает первое определенное значение »).
- маловероятно, что формат
enum
будет изменен (например, порядок определения и порядок перечня значений отличается) илиEnum.ToString()
будет изменен, однако это может произойти, поэтому убедитесь, что у вас есть тесты для случаи, когда вы полагаетесь на возвращаемое значение.