我有一个类,我想做一个自定义的“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
我希望它自动显示具有当前实例值的所有属性。但是我不知道如何在不专门输入的情况下获取属性的值。有动态的方式吗?
最佳答案
Type.GetMembers
返回一个 MemberInfo
对象列表,每个类型的成员一个。然而,并非所有成员都有值(value)观。字段和属性都有值,因此如果您只获得字段或属性的列表,您可以向它们询问它们的值。但是方法之类的东西没有值(value)。您可以调用它们并读取它们的返回值,但这与读取属性或字段的值不同。
换句话说,您必须根据每个成员的类型以不同方式处理每个成员。由于 MemberInfo
是最小的公分母,它没有任何仅适用于某些 成员的功能。如果您想要使用附加功能,则需要使用一种更具体的方法,例如 GetProperties
或 GetFields
。
由于您的类包含属性,您可能想要获取属性列表:
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
关于vb.net 列出具有值的类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54927675/