Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 获取活动枚举_.net_Vb.net - Fatal编程技术网

.net 获取活动枚举

.net 获取活动枚举,.net,vb.net,.net,Vb.net,我想列出任意枚举的成员。当枚举名是字符串时,是否有方法获取枚举列表或从其名称获取枚举 为什么??其思想是在Windows窗体中列出任何选定枚举的成员。要列出的特定枚举可以通过在文本框中输入其名称来指定;这需要一种从字符串获取枚举对象的方法,但VB.net似乎不支持这种方法。或者,也许更好,枚举可以从活动枚举列表中选择。在VB.Net中有如此多的枚举,因此可能需要将Enum名称列表限制为当前应用程序中使用的名称。这样一份清单可以检索吗 Dim enumType As Type = Type.Get

我想列出任意枚举的成员。当枚举名是
字符串时,是否有方法获取枚举列表或从其名称获取枚举

为什么??其思想是在Windows窗体中列出任何选定枚举的成员。要列出的特定枚举可以通过在
文本框中输入其名称来指定;这需要一种从
字符串
获取枚举对象的方法,但VB.net似乎不支持这种方法。或者,也许更好,枚举可以从活动枚举列表中选择。在VB.Net中有如此多的枚举,因此可能需要将
Enum
名称列表限制为当前应用程序中使用的名称。这样一份清单可以检索吗

Dim enumType As Type = Type.GetType(enumTypeName)
Dim names = System.Enum.GetNames(enumType) 'working
如果enumTypeName是该类型的“全名”,则上述代码将起作用
(例如
AssemblyName.YourEnum

因此,如果使用TeXbox输入EnUM类型的名称,则需要输入枚举的EnUM全名或考虑使用一些预定义的命名空间,在这里可以搜索给定的枚举名称< /P>

Function GetNamesByEnumTypeName(enumName As String) As IEnumerable(Of String)
    Dim namespaces = New List(Of String) From
    {
        "Microsoft.VisualBasic",
        "System"
    }

    Dim foundedTypes = namespaces.Select(Function(ns) $"{ns}.{enumName}").
                                  Select(Function(fullName) Type.GetType(fullName)).
                                  Where(Function(enumType) enumType IsNot Nothing)

    For Each foundedType In foundedTypes
        Return System.Enum.GetNames(foundedType)
    Next

    Return Enumerable.Empty(Of String)
End Function

您可以通过名称获取类型-
type.GetType(nameOfSelectedType)
其中
nameOfSelectedType
是一个字符串。您的真正目标是什么?我无法想象为什么一个普通的最终用户会知道、需要知道或想要知道.Net中
Enum
类型的名称。您的问题标题为“活动枚举”;如何定义“活动枚举”?我同意这似乎是一个奇怪的请求,但为了回答问题,您可以按照@Fabio的建议获得一个
类型
对象,然后将其传递给
Enum.GetNames
Enum.GetValues
方法。谢谢,Fabio,我会把它作为一种方法来做。谢谢,jmchilinney,这是我计划的,但我找不到从文本到类型对象的方法。法比奥可能已经解决了这个问题。现在,如果我能得到当前应用程序中使用的所有程序的列表,我就可以让生活变得更简单——回答TnTinMn——我不得不编写自己的VBA到VB.Net转换器,因为微软不再提供它们。这需要枚举成员的列表,以便可以在旧代码中检测到枚举成员,并在转换到VB.Net期间完全限定其名称。
Function GetNamesByEnumTypeName(enumName As String) As IEnumerable(Of String)
    Dim namespaces = New List(Of String) From
    {
        "Microsoft.VisualBasic",
        "System"
    }

    Dim foundedTypes = namespaces.Select(Function(ns) $"{ns}.{enumName}").
                                  Select(Function(fullName) Type.GetType(fullName)).
                                  Where(Function(enumType) enumType IsNot Nothing)

    For Each foundedType In foundedTypes
        Return System.Enum.GetNames(foundedType)
    Next

    Return Enumerable.Empty(Of String)
End Function