【问题标题】:Loop through values of properties of an object? [duplicate]循环遍历对象的属性值? [复制]
【发布时间】:2026-01-14 06:35:02
【问题描述】:

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

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

但是我所看到的一切都告诉了

        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) 只是对象数组中的第二个对象,所有对象都属于公司类

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

但这甚至不会建立。是不是因为我试图通过使用数组中的位置来给它对象?

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

【问题讨论】:

  • PropertyInfo Class 有很多属性和方法(比如它是什么数据类型,它是只读的,等等)。当你迭代(循环)时,你需要深入研究它以获得你想要的任何东西

标签: vb.net propertyinfo


【解决方案1】:

你应该这样调用:

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

注意GetProperties 返回一个由PropertyInfo 组成的数组——一个代表每个属性。

然后,循环:

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

请注意,PropertyInfo 类不包含对您从中派生类型信息的特定对象的引用(这就是您不能只调用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

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

【讨论】:

  • 为什么括号后面是propertyinfo而不是props?每次我声明一个数组时,我都会将 dim array(length) 写为类型
  • 这只是我在这种情况下的偏好,因为我认为数组是一种“类型”。如果你正在初始化一个固定长度的数组,我相信犹太声明的方法是 Dim array As Integer() = New Integer(2) {}。但是 VB6 有一些语法保留,您必须简单地说 Dim array(2) As Integer - 请记住 Basic(早于 C++)是用面向对象的原则进行改造的,并且它的数组语法早于改造。