循环遍历对象的属性值?
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
我还没有测试代码,所以请原谅任何小错误。
我知道有很多主题有相同的问题,但我很困惑。
我想遍历我的对象属性并写入值。
但我所看到的一切都表明
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
我还没有测试代码,所以请原谅任何小错误。