如何根据其名称检索Enum成员

时间:2012-01-04 09:12:45

标签: .net vb.net

我很容易拥有以下枚举

Public Enum TCheckStatus
        Checked
        NotChecked
        Indeterminate 
    End Enum

我想在枚举中找到给定名称的索引,最好的方法是什么?!!

例如:

假设我有“NotChecked”字符串,我希望输出为1

5 个答案:

答案 0 :(得分:2)

您正在寻找Enum.GetNames。它检索指定枚举中常量名称的数组。

Dim notCheckedStatus  = DirectCast([Enum].Parse(GetType(TCheckStatus), "NotChecked"), TCheckStatus)
Dim allStatusNames    = [Enum].GetNames(GetType(TCheckStatus))
Dim indexOfNotChecked = Array.IndexOf(AllStatusNames, "NotChecked") '=1'
  1. line:将string变量解析为枚举值
  2. line:将给定枚举类型的所有枚举值返回为Array
  3. line:返回Array
  4. 中给定枚举值的索引

    当然要解决你的问题,你只需要这个:

    Array.IndexOf([Enum].GetNames(GetType(TCheckStatus)), "NotChecked") 
    

答案 1 :(得分:1)

我无法提供精确的vb语法,但我会用C#编写它,所以看看你是否可以使用它:

int index = (int)Enum.Parse( typeof(TCheckStatus), "NotChecked");
在这种情况下,

index为1。如果你给一个无效的字符串(不是枚举的成员),它将抛出一个异常。如果这不是您想要的,则可以改为使用Enum.TryParse

如果您已经拥有枚举,则可以将其强制转换为int以获取索引:

var myEnum = TCheckStatus.NotChecked;
int index = (int)myEnum;

答案 2 :(得分:1)

要使用VB.net中的Enum方法获取名称及其整数等价数组,请使用GetNames()和GetValues()方法。使用Parse()来获取索引。希望这会有所帮助。

答案 3 :(得分:1)

int Output = (int)Enum.Parse(typeof(TCheckStatus), "NotChecked");

答案 4 :(得分:1)

试试这个:

Dim val as integer = cint(DirectCast([Enum].Parse(GetType(TCheckStatus), _
                          "NotChecked"), TCheckStatus)

StackOverflow - Parse a string to an Enum value in VB.NET