首页 > 解决方案 > 如何显示像 Visual Studio 工具提示这样的枚举?

问题描述

我有以下课程:

Public Class PetClass

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

    Public MyPetType As Animal = Animal.Cat

    (...)
End Class

当我将鼠标移到 MyPetType 上时,VS 显示以下内容:

在此处输入图像描述

我想用调试打印这个。

我正在使用以下代码来执行此操作:

<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”而不是“Cat {3}”。

我怎样才能让它输出“Cat {3}”?

有人建议

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

但这又回来了

Cat {Cat}

标签: vb.netreflection

解决方案


试试这个

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

推荐阅读