首页 > 解决方案 > 在 C# 中通过索引(而不是分配给它的值)获取枚举成员

问题描述

JavaScript世界中,您可以根据其在对象中的索引获得一个枚举值(不是分配给枚举成员的值,而是该枚举的第 n 个成员):

const myEnum = {
    Hello: 1,
    Bye: 2,
    Greeting: 3
}
const value = myEnum[Object.keys(myEnum)[0]];
console.log(value) // it returns 1

我想知道是否也有可能出现这种行为C#

我试图找到枚举的第 n 个成员,C#其中的值都是不同的,并且它们没有顺序(这正是我希望它们成为的样子)。

更新

enum CSharpEnum {
    SomeValue = 4,
    AnotherValue = 2,
    AndAnotherOne = 1
}

我从其他地方获得了一些索引(如 n),我想获得CSharpEnum. 一个例子:

var index = 2;
var member // a way to get the member and it should return 1 (AndAnotherOne)
// because it is the third member (0, 1, 2)

更新 2

看来我的问题还不够清楚,所以这里有一个指向dotnetfiddle 游乐场的链接。在其中一个答案中,有一种GetValues方法可以列出枚举值,但枚举成员在其中重新排列。我在操场上有一个枚举,我想获得第三个 (0, 1, 2) 成员,例如Want. 有没有办法让我得到它?

标签: c#enumsenumerate

解决方案


给定

public enum myEnum
{
    Hello = 1,
    Bye = 2,
    Greeting = 3
}

Enum 类有一个静态方法GetValues(Type)TEnum[] ,它返回这个枚举值的数组:

myEnum[] enumArray = (myEnum[])Enum.GetValues(typeof(myEnum));
myEnum value = enumArray[i]; // { [0] = Hello, [1] = Bye, [3] = Greeting }

较新版本的框架具有通用重载(从 .NET Framework 5.0 开始?):

myEnum[] enumArray = Enum.GetValues<myEnum>();
myEnum value = enumArray[i];

更新

枚举类型的目的是提供一组具有基础整数数字类型的命名常量。这些常量没有索引,也没有定义特定的顺序。如果您想让它们被索引,请将它们插入到数组中

enum myEnum {
    SomeValue = 4,
    AnotherValue = 2,
    AndAnotherOne = 1
}
static readonly myEnum[] enumArray = new[] {
    myEnum.SomeValue,
    myEnum.AnotherValue,
    myEnum.AndAnotherOne
};
myEnum value = enumArray[2]; // --> myEnum.AndAnotherOne

另请参阅:枚举类型(C# 参考)


推荐阅读