循环遍历对象的属性值?

Loop through values of properties of an object?

我知道有很多主题有相同的问题,但我很困惑。

我想遍历我的对象属性并写入值。

但我所看到的一切都表明

        Dim pinfo() As PropertyInfo = MyCompanies(1).GetType().GetProperties()

这会创建一个包含属性信息的数组,但它不会存储 object.property、

的实际值

属性 的名称是 ticker,但 Mycompanies(1).ticker 的值是 AMZN。

我的代码:

 Dim pinfo() As PropertyInfo = MyCompanies(1).GetType().GetProperties()

 'Loop through Properties 
 For pi = 0 To pinfo.Length - 1
        'I want to get the values of each property
        Console.WriteLine(?)
    Next pi

注意:MyCompanies(1)只是对象数组中的第二个对象,所有对象都是公司的class

https://msdn.microsoft.com/en-us/library/b05d59ty(v=vs.110).aspx 也无济于事。这让我相信我应该这样做:

    For Each pi In pinfo
        'I want to get the values of each property
        Console.WriteLine(PropertyInfo.GetValue(MyCompanies(1))
    Next pi

但这甚至无法构建。是因为我试图通过数组中的位置来给它对象吗?

...在这个循环之外,我将不得不遍历我的对象数组,所以我想我可以用 i...

替换 1

你应该这样打电话:

Dim props As PropertyInfo() = MyCompanies(1).GetType().GetProperties()

注意 GetProperties returns PropertyInfo 的数组 - 一个代表每个 属性.

然后,循环:

For Each prop in props
    Console.WriteLine(prop.GetValue(MyCompanies(1)).ToString())
Next

请注意,PropertyInfo class 不包含对您从中派生类型信息的特定对象的引用(这就是您不能只调用 prop.GetValue() 的原因)。

它只是一种描述有问题的 类型 的模板 - 因此您必须向它传递对实际对象的引用,该对象的 属性 值为您想提取。

如果您正在访问多个 MyCompanies 对象,您将只派生一次类型信息,然后您将重用它。

例如:

Dim props As PropertyInfo() = MyCompanies(1).GetType().GetProperties()

For Each company in MyCompanies

    Console.WriteLine(company.ToString()) 'e.g. to print the company name

    For Each prop in props
        Console.WriteLine(prop.GetValue(company).ToString())
    Next
Next

我还没有测试代码,所以请原谅任何小错误。