如何Enum从其价值中获得描述?
我可以使用以下名称从名称中获取描述:
Public Shared Function GetEnumDescription(ByVal EnumConstant As [Enum]) As String
Dim fi As FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
Dim attr() As DescriptionAttribute = _
DirectCast(fi.GetCustomAttributes(GetType(DescriptionAttribute), _
False), DescriptionAttribute())
If attr.Length > 0 Then
Return attr(0).Description
Else
Return EnumConstant.ToString()
End If
End Function
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何将变量名称传递给此函数.我尝试过类似的东西
GetEnumDescription([Enum].GetName(GetType(myEnum), 2)))
Run Code Online (Sandbox Code Playgroud)
但我没试过的任何事都是正确的.
Hei*_*nzi 16
如果你有一个枚举类型的变量,那就简单了
GetEnumDescription(myEnum)
Run Code Online (Sandbox Code Playgroud)
最小的工作示例:
Enum TestEnum
<Description("Description of Value1")>
Value1
End Enum
Public Sub Main()
Dim myEnum As TestEnum = TestEnum.Value1
Console.WriteLine(GetEnumDescription(myEnum)) ' prints "Description of Value1"
Console.ReadLine()
End Sub
Run Code Online (Sandbox Code Playgroud)
如果你有一个Integer变量,你需要先将它强制转换为你的枚举类型(CType也可以):
GetEnumDescription(DirectCast(myEnumValue, TestEnum))
Run Code Online (Sandbox Code Playgroud)
工作范例:
Enum TestEnum
<Description("Description of Value1")>
Value1 = 1
End Enum
Public Sub Main()
Console.WriteLine(GetEnumDescription(DirectCast(1, TestEnum)))
Console.ReadLine()
End Sub
Run Code Online (Sandbox Code Playgroud)
您混淆的原因似乎是一个误解:您的方法不会将枚举的"名称"作为参数,而是将其Enum作为参数.这是不同的,这也是你尝试使用GetName失败的原因.
这是获取Enum描述作为扩展的另一种解决方案。
Imports System.ComponentModel
Imports System.Runtime.CompilerServices
<Extension()> Public Function GetEnumDescription(ByVal EnumConstant As [Enum]) As String
Dim attr() As DescriptionAttribute = DirectCast(EnumConstant.GetType().GetField(EnumConstant.ToString()).GetCustomAttributes(GetType(DescriptionAttribute), False), DescriptionAttribute())
Return If(attr.Length > 0, attr(0).Description, EnumConstant.ToString)
End Function
Run Code Online (Sandbox Code Playgroud)
先前帖子中的示例用法:
Enum Example
<Description("Value1 description.")> Value1 = 1
<Description("Value2 description.")> Value2 = 2
End Enum
Sub Main()
Console.WriteLine(DirectCast(2, Example).GetEnumDescription())
Console.ReadLine()
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21251 次 |
| 最近记录: |