Список свойств класса vb.net со значениями - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть класс, и я хочу сделать пользовательскую функцию '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

Я хочу, чтобы он автоматически отображал все свойства со значением текущего экземпляра.Но я не знаю, как получить значение свойства без его конкретного указания.Есть ли динамический путь?

1 Ответ

0 голосов
/ 28 февраля 2019

Type.GetMembers возвращает список MemberInfo объектов, по одному на каждого члена типа.Однако не все члены имеют значения.Поля и свойства имеют значения, поэтому, если вы получите список только полей или только свойств, вы можете запросить их значения.Но такие вещи, как методы, не имеют значения.Вы можете вызывать их и читать их возвращаемые значения, но это отличается от чтения значения свойства или поля.

Другими словами, вы должны работать по-разному с каждым участником, в зависимости от того, какой он член.Поскольку 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
...