【发布时间】:2009-02-19 11:11:28
【问题描述】:
好的,我已经做了一段时间了,使用反射来完成很多我需要做的事情,但是我遇到了一个绊脚石......
我正在尝试使用反射来填充子属性数组的属性...不确定这是否清楚,因此最好在代码中进行解释:
父类:
Public Class parent
Private _child As childObject()
Public Property child As childObject()
Get
Return _child
End Get
Set(ByVal value As child())
_child = value
End Set
End Property
End Class
儿童班:
Public Class childObject
Private _name As String
Public Property name As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _descr As String
Public Property descr As String
Get
Return _descr
End Get
Set(ByVal value As String)
_descr = value
End Set
End Property
End Class
所以,使用反射,我试图通过父对象设置子对象数组的值...
我已经尝试了几种方法...以下是我目前所拥有的(我添加了示例数据只是为了简单起见):
Dim Results(1) As String
Results(0) = "1,2"
Results(1) = "2,3"
Dim parent As New parent
Dim child As childObject() = New childObject() {}
Dim PropInfo As PropertyInfo() = child.GetType().GetProperties()
Dim i As Integer = 0
For Each res As String In Results
Dim ResultSet As String() = res.Split(",")
ReDim child(i)
Dim j As Integer = 0
For Each PropItem As PropertyInfo In PropInfo
PropItem.SetValue(child, ResultSet(j), Nothing)
j += 1
Next
i += 1
Next
parent.child = child
这在 PropItem.SetValue 上以 ArgumentException 严重失败:找不到属性集方法。
有人有什么想法吗?
@乔恩:-
谢谢,我想我已经走得更远了,通过创建单独的子对象,然后将它们分配给一个数组......现在的问题是尝试将该数组分配给父对象(使用反射)。
这应该不难,但我认为问题来了,因为我不一定知道父/子类型。我正在使用反射来确定传入哪个父/子。父始终只有一个属性,即子对象的数组。当我尝试将子数组分配给父对象时,我得到一个无效的强制转换异常,说它无法将 Object[] 转换为 .
编辑: 基本上,我现在拥有的是:
Dim PropChildInfo As PropertyInfo() = ResponseObject.GetType().GetProperties()
For Each PropItem As PropertyInfo In PropChildInfo
PropItem.SetValue(ResponseObject, ResponseChildren, Nothing)
Next
ResponseObject 是父类的实例,ResponseChildren 是childObject 类的数组。
这失败了: “System.Object[]”类型的对象无法转换为“childObject[]”类型。
【问题讨论】:
标签: vb.net arrays reflection