2017-02-25 3 views
-1
arbeiten

Ich versuche Nested-Klasse Array zu setzen Array.SetValueArray.SetValue nicht

ich einen sehr langen Code für verschachtelte Klasse Verarbeitung haben mit zu arbeiten, aber ich habe ein Problem mit Array einer Klasse (Und ich will Reflexion verwenden)

hier ist mein Code:

Private Function ReadStruct(Of T As {New, Class})() 
     Dim structArray As New T 
     Dim structArraynn As Object = structArray 
     structArray = readclasses(structArraynn) 
     Return structArray 
    End Function 

Private Function readclasses(ByVal cls as object) as object 
Dim obj as object = cls 
For Each f As System.Reflection.FieldInfo In cls.GetType().GetFields 

viele Codes ...

Dim obj2() As Object = f.GetValue(obj) 
Dim MyInstance As Object = Activator.CreateInstance(Type.GetType(f.FieldType.ToString().Replace("[]", ""))) 
Dim MyInstance2 As Array = Array.CreateInstance(Type.GetType(f.FieldType.ToString().Replace("[]", "")), obj.Length) 
For i As Integer = 1 To obj.Length 
     MyInstance2.SetValue(readclasses(MyInstance), i - 1) 
Next 
MsgBox(MyInstance2.GetValue(0).GetType().GetField("Test").GetValue(MyInstance)) 

Und Die Klassen werden defind wie die folgenden

class m2 
public mm as integer 
end class 

Class main2 
public int(1) as integer 
public test(10) as m2 
end class 

aber wenn ich msgbox Linie direkt nach MyInstance2.SetValue Aufruf gibt es den richtigen Wert!

im mit vs2013 mit .NET2 Projekt

Edit: es stellt sich heraus, dass alle Test Array-Elemente den gleichen Wert haben

Here is an example(.net feddle)

Antwort

0

ich eine neue Instanz zu schaffen hatte (Warum?) für jedes Array-Element durch Aufrufen von activator.creatinstance jedes Mal in der Schleife

Example