【发布时间】:2013-06-08 00:42:51
【问题描述】:
我现在正在使用一个测试对象作为一个非常大的对象(大约 700 个属性)的概念证明。
基本上我要做的是使用新的构造函数设置对象中的数据,而不必手动设置属性,因为有这么多。例如
Person.Name = "Bob"
Person.Age = 30
etc...
相反,我要做的是通过反射遍历对象中的属性并设置对象中的属性。来自大型机的数据以巨大的字符串形式传入......
Private _person As Person
Public Sub New(ByVal personData As String)
_person = TryCast(ConvertStringToObject(personData, Me.GetType), Person)
End Sub
Public Property FirstName As String
Get
Return _person.FirstName
End Get
Set(ByVal value As String)
_person.FirstName = value
End Set
End Property
Private Function ConvertStringToObject(ByVal data As String, ByVal obj As Object) As Object
Dim objectType As Type = obj.GetType
Dim properties As PropertyInfo() = objectType.GetProperties
For Each objProperty As PropertyInfo In properties
'just an example... not really how i get data...
Dim value As String = data.Substring(0, 10)
objProperty.SetValue(obj, value, Nothing)
Next
Return obj
End Function
因此,当我运行此代码时,一旦设置了属性名(第一个属性),我就会收到一个对象引用集错误...似乎我已经创建了一个悖论...我正在尝试在它存在之前设置一些东西,但要让它存在,我需要先填充它。
我使用的方法需要是通用的,因为它处理的是一堆不同的对象,这就是我返回一个对象的原因。
我过去做过类似的事情,但是实体框架中的实体和实体被构建到 MVC 表单的模型中,但在那种情况下,我有两个不同的对象,所以没有问题。
就目前而言,我的 convertStringToObject 方法自己关闭,我只是调用它并将其转换为我想要的对象,但我真的希望将它放在基类中并让其他对象继承它并使用一个新的构造函数。所以代码看起来像:
dim person as new Person
person = TryCast(ConvertStringToObject(dataString,person), Person)
同样不是很多代码,但仍然希望通过新的构造函数在类内部进行转换...
任何想法都将不胜感激!
谢谢。
【问题讨论】:
标签: .net vb.net oop reflection