gpt4 book ai didi

c# - 如何获取枚举在其定义列表中的数字位置?

转载 作者:行者123 更新时间:2023-11-30 14:10:44 25 4
gpt4 key购买 nike

我需要获取枚举在其定义中的数字位置。考虑以下枚举 - 它用于位字段但状态名称如果他们具有我评论过的右侧值,将会很有用。

[Flags]
public enum StatusFlags
{
None = 0, // 0 -- these commented indexes are the numbers I also would like
Untested = 1, // 1 to associate with the enum names.
Passed_Programming = 2, // 2
Failed_Programming = 4, // 3
// ... many more
}

我创建了一个静态方法,如下所示,它可以满足我的需要。

public static int GetStatusID(this StatusFlags flag)
{
int i = 0;
foreach (StatusFlags val in Enum.GetValues(typeof(StatusFlags)))
{
if (flag == val) break;
i++;
}
return i;
}

它是这样使用的:

StatusFlags f = StatusFlags.Failed_Programming;

// I want the position i.e value of 3 not the value the enum is associated with i.e 4
int Index = f.GetStatusID();

有更好的方法吗?

最佳答案

如何在枚举上使用属性?像这样:

[Flags]
public enum StatusFlags
{
[Index=0]
None = 0,

[Index=1]
Untested = 1,

[Index=2]
Passed_Programming = 2,

[Index=3]
Failed_Programming = 4,
// ... many more
}

然后你可以像这样获取枚举的索引值:

var type = typeof(StatusFlags);
var statusFlag = type.GetMember(StatusFlags.Untested.ToString());
var attributes = statusFlag [0].GetCustomAttributes(typeof(IndexAttribute),false);
var index = int.Parse(((IndexAttribute)attributes[0]).Index); //if you need an int value

关于c# - 如何获取枚举在其定义列表中的数字位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22478029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com