2016-12-07 26 views
1

動的プロパティを動的にオブジェクトに追加したいと考えています。同様の質問がここで回答されている間、それはExpandoObjectを使用しています。実行時に動的プロパティを動的に追加する

Dynamically Add C# Properties at Runtime

は、上記の答えは、動的にプロパティを追加しますが、それは私の必要性をfullfilしません。 変数のプロパティを追加できます。

public static ExpandoObject Extend<T>(this T obj) 
{ 
    ExpandoObject eo = new ExpandoObject(); 
    PropertyInfo[] pinfo = typeof(T).GetProperties(); 
    foreach(PropertyInfo p in pinfo) 
    { 
     //now in here I want to get the fields and properties of the obj 
     //and add it to the return value 
     //p.Name would be the eo.property name 
     //and its value would be p.GetValue(obj); 
    } 

    eo.SomeExtension = SomeValue; 
    return eo; 
} 

答えて

4

あなたが行うことができます:より多くの私はreaaly何をしたいのか

はタイプTのオブジェクトを受け取り、そのオブジェクトのすべてのフィールドに加えて、一部で拡張オブジェクトを返すジェネリックメソッドを書くことですこのようなものは:

var p = new { Prop1 = "value 1", Prop2 = 123 }; 
dynamic obj = p.Extend(); 

Console.WriteLine(obj.Prop1);   // Value 1 
Console.WriteLine(obj.Prop2);   // 123 
Console.WriteLine(obj.SomeExtension); // Some Value 
+1

グレートansweを:

public static ExpandoObject Extend<T>(this T obj) { dynamic eo = new ExpandoObject(); var props = eo as IDictionary<string, object>; PropertyInfo[] pinfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo p in pinfo) props.Add(p.Name, p.GetValue(obj)); //If you need to add some property known at compile time //you can do it like this: eo.SomeExtension = "Some Value"; return eo; } 

これは、あなたがこれを行うことができますrありがとう。 –

関連する問題