.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