首页 > 解决方案 > vb.net 列出具有值的类属性

问题描述

我有一堂课,我想做一个自定义的“toString”函数;

Public Class Person
    public property Name as string
    public property Age as interger

    public Overrides Function ToString() as string
         dim BigStr as string = ""
         for each Member as MemberInfo in Me.GetType.GetMembers
               bigst += Member.Name & " " & [thevalue of this instance]
         next
         return BigStr
    end function
end class

我希望它自动显示具有当前实例值的所有属性。但是我不知道如何在没有专门输入的情况下获取财产的价值。有没有动态的方法?

标签: vb.netclasspropertiestostring

解决方案


Type.GetMembers返回一个MemberInfo对象列表,每个类型的成员一个。但是,并非所有成员都有价值。字段和属性都有值,因此如果您只获得字段或属性的列表,您可以询问它们的值。但是方法之类的东西没有价值。您可能能够调用它们并读取它们的返回值,但这与读取属性或字段的值不同。

换句话说,你必须对每个成员进行不同的工作,这取决于它是什么类型的成员。由于MemberInfo是最低公分母,因此它没有任何仅适用于某些成员的功能。如果您想要使用其他功能,则需要使用更具体的方法之一,例如GetPropertiesGetFields

由于您的类包含属性,您可能想要获取属性列表:

Public Class Person
    Public Property Name As String
    Public Property Age As Integer

    Public Overrides Function ToString() As String
        Dim bigStr As String = ""
        For Each p As PropertyInfo In Me.GetType().GetProperties()
            bigStr &= p.Name & " " & p.GetValue(Me)?.ToString()
        Next
        Return bigStr
    End Function
End Class

推荐阅读