我现在正在使用一个测试对象作为一个非常大的对象(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)
同样不是很多代码,但仍然希望通过新的构造函数在类内部进行转换......
任何想法将不胜感激!
谢谢你。