vb.net 列出带有值的类属性

Lec*_*ere 3 vb.net properties class tostring

我有一个类,我想做一个自定义的“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
Run Code Online (Sandbox Code Playgroud)

我希望它自动显示具有当前实例值的所有属性。但我不知道如何在不明确输入的情况下获取属性的值。有动态的方式吗?

Ste*_*art 7

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
Run Code Online (Sandbox Code Playgroud)