0
假定以下示例類其模擬從XSD文件生成的類的類型:在不調用構造函數的情況下遞歸地實例化子類?
Public Class MyClass
Public Class MyInnerClass1
Public Class MyInnerInnerClass1
Public Property MyProp1 as string
Public Property MyProp2 as string
...
End Class
...
Public Property MyInnerInnerClassProp1 as MyInnerInnerClass1
End Class
Public property MyInnerClassProp1 as MyInnerClass1
Public property MyInnerClassProp2 as MyInnerClass2
...
End Class
注意,沒有構造函數。在觸及基本屬性(如Property MyProp1 as string
)之前,內部類的級別(在此特定情況下)可能會循環深入5個級別。
如何遞歸遍歷所有公共可寫屬性,並將它們初始化爲沒有構造函數的對象類型的新實例?
例如,這裏是我現在的代碼,目前只能深入一層。
Private Shared Sub InitProperties(obj As Object)
For Each prop As Object In obj.[GetType]().GetProperties(BindingFlags.[Public] Or BindingFlags.Instance).Where(Function(p) p.CanWrite)
Dim type__1 = prop.PropertyType
Dim constr = type__1.GetConstructor(Type.EmptyTypes)
'find paramless const
If type__1.IsClass Then
Dim propertyInstance = DirectCast(FormatterServices.GetUninitializedObject(type__1.GetType()), Object)
'Dim propInst = Activator.CreateInstance(type__1)
'prop.SetValue(obj, propInst, Nothing)
InitProperties(propertyInstance)
End If
Next
End Sub