Разница между 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