2016-07-27 5 views
0

次の問題があります。 Listアイテムをコレクションのクラスのフィールドに追加したいとします。リストタイプのフィールドにListItemを追加する

明確にする: 私はクラスを持っている:私が欲しいもの

class MyClass { 
    List<MyStruct> myList1; 
    List<MyStruct> myList2; 
} 

struct MyStruct { 
    string foo { get; set; } 
    string bar { get; set; } 
} 

は、フィールドを通じ取得することにより、リストmyList1に体mystructを追加することです:

MyClass blub = new MyClass(); 
(blub.GetType().GetField("myList1") as List<MyStruct>).Add(new Mystruct { 
     foo = "foo"; 
     bar = "bar"; 
    }); 

は可能性がありますどのようにこれを達成するために? 主な問題は、フィールドを文字列で識別しなければならないことです。

答えて

2

Reflectionを使用すると、プライベートフィールドを取得するためにBindingFlagsを指定する必要があります。あなたがそれを得るとき、FieldInfo.SetValueFieldInfo.GetValueを使用する必要があります。このように:

MyClass blub = new MyClass(); 

var field = blub.GetType().GetField("myList1", BindingFlags.NonPublic | BindingFlags.Instance); 
List<MyStruct> value = field.GetValue(blub) as List<MyStruct>; 

if (value == null) 
    value = new List<MyStruct>(); 

value.Add(new MyStruct { foo = "foo", bar = "bar" }); 

field.SetValue(blub, value); 

あなたはパブリックであるためにあなたの構造体のプロパティを変更する必要があります。注:

struct MyStruct 
{ 
    public string foo { get; set; } 
    public string bar { get; set; } 
} 
+0

は、手がかりは、リストを取得するには、Get値を行うことでした。 と入力し、値を再度フィールドに設定します。 ありがとう! –

関連する問題