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

时间:2019-02-28 14:14:16

标签: vb.net class properties tostring

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

use DateTime;
use DateTime::Format::Strptime;

my $parser = DateTime::Format::Strptime->new(
  pattern => '%Y-%m-%dT%H:%M:%S%z',
);

my $date = '2019-02-28T08:42:57+0000';

my $dt = $parser->parse_datetime($date);

say $dt->strftime('%Y/%m/%d');

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

1 个答案:

答案 0 :(得分:3)

Type.GetMembers返回一个MemberInfo对象的列表,该类型的每个成员一个。但是,并非所有成员都有价值观。字段和属性具有值,因此,如果仅获取字段或属性的列表,则可以要求它们提供值。但是方法之类的东西没有价值。您也许可以调用它们并读取它们的返回值,但这不同于读取属性或字段的值。

换句话说,您必须根据每个成员的类型对每个成员进行不同的工作。由于MemberInfo是最低的公分母,因此它不具有仅对成员的 some 有效的任何功能。如果您想使用其他功能,则需要使用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