c# - 在 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
. 有没有办法让我得到它?
解决方案
给定
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# 参考)
推荐阅读
- laravel - 在 Laravel 中管理多个 API 版本
- ios - TableView 页脚位置不正确
- python - 需要在同步函数中等待一个函数
- python - 强制 Google Colab 在 boost.python 库中使用 python 3
- javascript - 重新渲染依赖于 svelte 中的大数组的组件的最佳方法
- r - 为什么 rjags 在这里给出 Dimension mismatch 取 y 错误的子集?
- laravel - 如何在通知集合中获取日期格式
- angular - Spring Oauth2 PKCE 授权
- json - 如何编写解析此 JSON 的 Dart 模型类?
- wordpress - 无法从 Ubuntu 18.04 EC2 实例上的 Wordpress 连接到 RDS mysql DB