2011-12-03 21 views
11

मैं इसगतिशील रूप से गतिशील वस्तु में गुण जोड़ना?

dynamic d = new ExpandoObject(); 
d.Name = attribute.QualifiedName.Name; 

हां, मुझे पता है कि घ एक संपत्ति का नाम होगा। अब अगर मैं संकलन समय पर संपत्ति का नाम नहीं जानता, तो मैं उस संपत्ति को गतिशील में कैसे जोड़ूं। मुझे यह SO Question

इसलिए, कॉल बाइंडर्स इत्यादि की जटिल जटिलता है। जो पहले स्थान पर जाना मुश्किल है। ऐसा करने का एक आसान तरीका है?

+0

[करने के लिए अज्ञात जोड़ना (डिजाइन समय) गुणों के संभावित डुप्लिकेट एक ExpandoObject] (http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – nawfal

उत्तर

23
dynamic d = new ExpandoObject(); 
((IDictionary<string,object>)d)["test"] = 1; 
//now you have d.test = 1 
4

आप भी इस तरह कर सकते हैं: - एक क्लीनर तरीका

var myObject = new ExpandoObject() as IDictionary<string, Object>;

Dictionary<string,object> coll = new Dictionary<string,object>(); 
    coll.Add("Prop1","hello"); 
    coll.Add("Prop2",1); 
    System.Dynamic.ExpandoObject obj = dic.Expando(); 

//You can have this ext method to better help 

public static ExpandoObject Expando(this IEnumerable<KeyValuePair<string, object>> 
dictionary) 
     { 
      var expando = new ExpandoObject(); 
      var expandoDic = (IDictionary<string, object>)expando; 
      foreach (var item in dictionary) 
      { 
       expandoDic.Add(item); 
      } 
      return expando; 
     } 
+0

अच्छा तरीका ... बहुत साफ .. –

संबंधित मुद्दे