如何在VB.NET中从枚举中获取描述?
我的枚举如下如何在VB.NET中从枚举中获取描述?,.net,vb.net,string,enums,.net,Vb.net,String,Enums,我的枚举如下 Public Enum FailureMessages <Description("Failed by bending")> FailedCode1 = 0 <Description("Failed by shear force")> FailedCode2 = 1 End Enum 任何人都可以帮助我,我如何在VB.NET中做到这一点您需要使用反射来检索描述。由于这些是用户添加的,因此可能会缺少一个或多个,如果缺少属性,我希望它返回名称
Public Enum FailureMessages
<Description("Failed by bending")>
FailedCode1 = 0
<Description("Failed by shear force")>
FailedCode2 = 1
End Enum
任何人都可以帮助我,我如何在VB.NET中做到这一点您需要使用
反射
来检索描述
。由于这些是用户添加的,因此可能会缺少一个或多个,如果缺少属性,我希望它返回名称
导入系统反射
导入System.ComponentModel
公共共享函数GetEnumDescription(e作为[Enum])作为字符串
Dim t As Type=e.GetType()
尺寸属性=C类型(t。
GetField([Enum].GetName(t,e))。
GetCustomAttribute(GetType(DescriptionAttribute)),
描述属性)
如果attr不是空的,那么
返回属性描述
其他的
返回e.ToString
如果结束
端函数
用法:
Dim var As FailureMessages = FailureMessages.FailedCode1
Dim txt As String = GetDescription(var)
Dim descr = Utils.GetDescriptions(Of FailureMessages)()
ComboBox1.Items.AddRange(descr)
您可以创建一个版本来获取枚举的所有描述:
Friend Shared Function GetEnumDescriptions(Of EType)() As String()
Dim n As Integer = 0
' get values to poll
Dim enumValues As Array = [Enum].GetValues(GetType(EType))
' storage for the result
Dim Descr(enumValues.Length - 1) As String
' get description or text for each value
For Each value As [Enum] In enumValues
Descr(n) = GetEnumDescription(value)
n += 1
Next
Return Descr
End Function
用法:
Dim var As FailureMessages = FailureMessages.FailedCode1
Dim txt As String = GetDescription(var)
Dim descr = Utils.GetDescriptions(Of FailureMessages)()
ComboBox1.Items.AddRange(descr)
T的使它更易于使用。传递类型将是:
Shared Function GetEnumDescriptions(e As Type) As String()
' usage:
Dim items = Utils.GetEnumDescriptions(GetType(FailureMessages))
请注意,使用名称填充组合意味着您需要解析结果以获得值。相反,我发现将所有名称和值放入一个列表(名称-值对)
以将它们放在一起会更好/更容易
您可以将控件绑定到列表,并使用DisplayMember
向用户显示名称,而代码使用ValueMember
返回实际键入的值。不是重复的-这是针对VB.NET的,而不是针对C++的!可以通过提及您需要导入System.Reflection
和System.ComponentModel
来改进。最初,我将枚举变量命名为描述性变量,但为了以后的报告目的,我需要一个适当的描述。你的功能有帮助!干杯