C# Enum.GetValues和Enum.GetNames之间的差异

C# Enum.GetValues和Enum.GetNames之间的差异,c#,.net,C#,.net,我看到Enum.GetValues返回基Array类型和Enum.GetNames返回一个string数组。但我不明白这有多重要。对于enum无论如何,值都是字符串 但是,有一个相关的问题。如果我给DataSource=enum.GetValues,则DataGridView组合框列数据绑定到enum,但当我给它enum.GetNames作为DataSource枚举时,它不进行数据绑定GetNames返回字段名GetValues返回数值 MSDN上有一个很好的示例。将为枚举中的每个项返回一个基础

我看到
Enum.GetValues
返回基
Array
类型和
Enum.GetNames
返回一个
string
数组。但我不明白这有多重要。对于
enum
无论如何,值都是字符串


但是,有一个相关的问题。如果我给
DataSource
=
enum.GetValues
,则
DataGridView
组合框
列数据绑定到
enum
,但当我给它
enum.GetNames
作为
DataSource
枚举时,它不进行数据绑定
GetNames
返回字段名
GetValues
返回数值

MSDN上有一个很好的示例。

将为枚举中的每个项返回一个基础整数值数组

将返回枚举中项目名称的字符串数组


GetValues返回的数组实现了IList,而GetNames返回的字符串[]没有实现IList,这解释了绑定差异。

将枚举视为名称/值对

enum SignMagnitude { Negative = -1, Zero = 0, Positive = 1 };
在上面的示例中,
GetNames()
将返回一个
字符串
数组,其中包含“负”、“零”和“正”项。
GetValues()
将返回一个
signmagnity
数组,该数组包含
signmagnity.Negative
signmagnmagnity.Zero
signmagnmagname.One



这里有一个将枚举名称绑定到DataGridView下拉列表的示例:

此答案为false。GetValues返回枚举值,该值可以转换为数值(例如示例中的整数),也可以转换为字符串或其他内容。GetValues,在当前示例中,枚举基于long,值为Uin32.MaxValue+2,则返回为1(表示get 64位参考底图值被截断为32位)请记住
Enum.GetValues
如果您的枚举具有相同值的不同名称,则返回重复的值
Enum.GetNames
应该为您提供不同的枚举名称。