Как я могу показать перечисление, подобное всплывающей подсказке Visual Studio? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть следующий класс:

Public Class PetClass

    Public Enum Animal
         Bird = 1
         Dog = 2
         Cat = 3
    End Enum

    Public MyPetType As Animal = Animal.Cat

    (...)
End Class

Когда я наводю указатель мыши на MyPetType, VS показывает следующее:

enter image description here

Я хотел бы распечатать это с помощью Debug.

Для этого я использую следующий код:

<Extension()>
Public Function Description(ByVal EnumConstant As [Enum]) As String
    Dim fi As Reflection.FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
    Dim aattr() As DescriptionAttribute = DirectCast(fi.GetCustomAttributes(GetType(DescriptionAttribute), False), DescriptionAttribute())
    If aattr.Length > 0 Then
        Return aattr(0).Description
    Else
        Return EnumConstant.ToString()
    End If
End Function

Затем я использую его так:

Dim n As New PetClass
Debug.Print(Description(n.MyPetType))

Результатом будет «Cat».

Когда я отлаживаю функцию и наводя указатель мыши на последнюю строку, она точно показывает, что я хочу вывести:

enter image description here

Однако результат функции - «Кот», а не «Кот {3}».

Как я могу заставить его выводить «Кот {3}»?

Кто-то предложил

String.Format("{0} {{{1}}}", EnumConstant.ToString(), EnumConstant) 

Но это вернуло

Cat {Cat}

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Попробуйте это

Public Class PetClass
    '
    ' test
    '
    '  Dim foo As New PetClass(PetClass.Animal.Dog)
    '  Debug.WriteLine(foo.AsString)
    ' output:  Dog{2}

    Public Enum Animal
        none = 0
        Bird = 1
        Dog = 2
        Cat = 3
    End Enum

    Public MyPetType As Animal = Animal.none

    Public Sub New(WhichAnimal As Animal)
        Me.MyPetType = WhichAnimal
    End Sub

    Public Function AsString() As String
        Return String.Format("{0}{{{1}}}", Me.MyPetType, Me.MyPetType.ToString("D"))
    End Function
End Class

Обобщено как расширение,

<Extension()>
Public Function Description(ByVal EnumConstant As [Enum]) As String
    Return String.Format("{0}{{{1}}}", EnumConstant, EnumConstant.ToString("D"))
End Function
0 голосов
/ 27 мая 2020
Public Function Description(ByVal EnumConstant As [Enum]) As String
    Dim fi As Reflection.FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
    Dim aattr() As DescriptionAttribute = DirectCast(fi.GetCustomAttributes(GetType(DescriptionAttribute), False), DescriptionAttribute())
    If aattr.Length > 0 Then
        Return aattr(0).Description
    Else

        Return EnumConstant.ToString() & " {" & GetEnumInt(EnumConstant) & "}"

    End If
End Function

Public Function GetEnumInt(Of T)(enumVal As T) As Integer
    Return Convert.ToInt32(enumVal)
End Function
...