Разница между Enum.GetValues и Enum.GetNames
Я вижу, что Enum.GetValues
возвращает базовый тип Array
и Enum.GetNames
возвращает массив string
. Но я не понимаю, как это очень важно. Для enum
в любом случае значения являются строками.
Но существует связанная с этим проблема. Столбец DataGridView
ComboBox
привязан к enum
, если я даю DataSource
= Enum.GetValues
, но он не привязывается к данным, когда я даю ему Enum.GetNames
как DataSource
.
Ответы
Ответ 1
GetValues вернет массив базовых значений для каждого элемента в Enum.
GetNames вернет строковый массив имен для элементов в перечислении.
Массив, возвращаемый GetValues, реализует IList, в то время как строка [], возвращаемая GetNames, не отвечает, что объясняет различия в привязке.
Ответ 2
Перечисления на самом деле являются числовыми. GetNames
возвращает имена полей. GetValues
возвращает числовые значения.
MSDN имеет отличный образец на GetValues
.
Ответ 3
Подумайте о перечислениях как пары Name/Value.
enum SignMagnitude { Negative = -1, Zero = 0, Positive = 1 };
В приведенном выше примере GetNames()
вернет массив string
, содержащий элементы "Отрицательный", "Нуль" и "Положительный". GetValues()
возвращает массив int
, содержащий -1, 0 и 1.
Ниже приведен пример привязки имен Enum к выпадающему меню DataGridView: Создавать параметры списка вниз из перечисления в DataGridView