C# 迭代枚举? (索引 System.Array)
我有以下代码:
// Obtain the string names of all the elements within myEnum
String[] names = Enum.GetNames( typeof( myEnum ) );
// Obtain the values of all the elements within myEnum
Array values = Enum.GetValues( typeof( myEnum ) );
// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
print( names[i], values[i] );
}
但是,我无法索引值。 有没有更简单的方法来做到这一点?
或者我完全错过了什么!
I have the following code:
// Obtain the string names of all the elements within myEnum
String[] names = Enum.GetNames( typeof( myEnum ) );
// Obtain the values of all the elements within myEnum
Array values = Enum.GetValues( typeof( myEnum ) );
// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
print( names[i], values[i] );
}
However, I cannot index values. Is there an easier way to do this?
Or have I missed something entirely!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
或者,您可以转换返回的 System.Array:
但是,您能否确定 GetValues 返回值的顺序与 GetNames 返回名称的顺序相同?
Or, you can cast the System.Array that is returned:
But, can you be sure that GetValues returns the values in the same order as GetNames returns the names ?
您需要转换数组 - 返回的数组实际上是请求的类型,即
myEnum[]
如果您要求typeof(myEnum)
:那么
values[ 0]
等You need to cast the array - the returned array is actually of the requested type, i.e.
myEnum[]
if you ask fortypeof(myEnum)
:Then
values[0]
etc您可以将该数组转换为不同类型的数组:
或者如果您想要整数值:
您当然可以迭代这些转换的数组:)
You can cast that Array to different types of Arrays:
or if you want the integer values:
You can iterate those casted arrays of course :)
字典列表怎么样?
当然,您可以将字典值类型更改为您的枚举值。
How about a dictionary list?
and of course you can change the dictionary value type to whatever your enum values are.
使用 foreach 循环怎么样,也许你可以用它?
也许是这样的?
What about using a foreach loop, maybe you could work with that?
something like that perhaps?
这是另一个。 我们需要为 EnumValue 提供友好的名称。 我们使用 System.ComponentModel.DescriptionAttribute 来显示每个枚举值的自定义字符串值。
使用中
这将结束返回“Something 1”、“Something 2”
Here is another. We had a need to provide friendly names for our EnumValues. We used the System.ComponentModel.DescriptionAttribute to show a custom string value for each enum value.
In Use
This will end returning "Something 1", "Something 2"
另一个解决方案,具有有趣的可能性:
Another solution, with interesting possibilities:
老问题,但使用 LINQ 的
.Cast<>()
是一种稍微干净的方法Old question, but a slightly cleaner approach using LINQ's
.Cast<>()
在 Enum.GetValues 结果中,转换为 int 会生成数值。 使用 ToString() 生成友好名称。 不需要对 Enum.GetName 进行其他调用。
In the Enum.GetValues results, casting to int produces the numeric value. Using ToString() produces the friendly name. No other calls to Enum.GetName are needed.
Array 有一个 GetValue(Int32) 方法,可用于检索指定索引处的值。
Array.GetValue
Array has a GetValue(Int32) method which you can use to retrieve the value at a specified index.
Array.GetValue
您可以使用格式字符串来简化此操作。 我在使用消息中使用以下代码片段:
D 格式说明符将枚举值格式化为十进制。 还有一个提供十六进制输出的 X 说明符。
G 说明符将枚举格式化为字符串。 如果 Flags 属性应用于枚举,则也支持组合值。 有一个 F 说明符,其作用就好像 Flags 始终存在一样。
请参阅 Enum.Format()。
You can simplify this using format strings. I use the following snippet in usage messages:
The D format specifier formats the enum value as a decimal. There's also an X specifier that gives hexadecimal output.
The G specifier formats an enum as a string. If the Flags attribute is applied to the enum then combined values are supported as well. There's an F specifier that acts as if Flags is always present.
See Enum.Format().
这是迭代自定义 Enum 对象的简单方法
Here is a simple way to iterate through your custom Enum object
古老的问题,但 3Dave 的答案提供了最简单的方法。 我需要一个小辅助方法来生成 Sql 脚本来解码数据库中的枚举值以进行调试。 它工作得很好:
我把它放在静态方法中,所以用法是:
Ancient question, but 3Dave's answer supplied the easiest approach. I needed a little helper method to generate a Sql script to decode an enum value in the database for debugging. It worked great:
I have it in a static method, so usage is: