18

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 

しかし、この関数に変数名を渡す方法がわかりません。私は次のようなことを試しました

GetEnumDescription([Enum].GetName(GetType(myEnum), 2)))

しかし、私が試したことは何も正しくありません。

4

2 に答える 2

18

列挙型の変数がある場合、それは単純です

GetEnumDescription(myEnum)

最小限の実例:

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

変数がある場合は、Integer最初に列挙型にキャストする必要があります (CType同様に機能します)。

GetEnumDescription(DirectCast(myEnumValue, TestEnum))

作業例:

Enum TestEnum
    <Description("Description of Value1")>
    Value1 = 1
End Enum

Public Sub Main()
    Console.WriteLine(GetEnumDescription(DirectCast(1, TestEnum)))
    Console.ReadLine()
End Sub

あなたの混乱の原因は誤解のようです:あなたのメソッドは列挙型の「名前」をパラメーターとしてとらず、パラメーターとしてとりEnumます。GetNameそれは別のことであり、それがあなたの使用の試みが失敗した理由でもあります.

于 2013-09-19T07:25:44.337 に答える
5

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

以前の投稿からの使用例:

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
于 2015-07-14T23:07:04.370 に答える