2011-02-08 23 views
175

में गुण जोड़ना मैं गतिशील रूप से रनटाइम पर ExpandoObject में गुण जोड़ना चाहता हूं। तो उदाहरण के लिए एक स्ट्रिंग प्रॉपर्टी कॉल जोड़ने के लिए न्यूप्रॉप मैं कुछ लिखना चाहूंगा जैसेगतिशील रूप से एक ExpandoObject

var x = new ExpandoObject(); 
x.AddProperty("NewProp", System.String); 

क्या यह आसानी से संभव है?

+0

संभव डुप्लिकेट [जब आप किसी अन्य वैरिएबल के नाम है एक सी # 4 गतिशील वस्तु का एक गुण सेट करने के लिए कैसे] (http://stackoverflow.com/questions/ 3033410/कैसे-से-सेट-ए-प्रॉपर्टी-ऑफ-एसी-तेज -4-गतिशील-ऑब्जेक्ट-जब-आप-नाम-में-ए-ए) – nawfal

उत्तर

373
dynamic x = new ExpandoObject(); 
x.NewProp = string.Empty; 
वैकल्पिक रूप से

:

var x = new ExpandoObject() as IDictionary<string, Object>; 
x.Add("NewProp", string.Empty); 
+25

मुझे कभी एहसास नहीं हुआ है कि * विस्तार * आईडी <स्ट्रिंग, ऑब्जेक्ट>। मैंने हमेशा सोचा है कि कलाकार इसे एक शब्दकोश में कॉपी करेगा। हालांकि, आपकी पोस्ट ने मुझे समझ लिया है कि यदि आप शब्दकोश बदलते हैं, तो आप अंतर्निहित ExpandoObject भी बदलते हैं! बहुत बहुत धन्यवाद – Dyna

+0

यह आश्चर्यजनक है, और मैंने दिखाया है कि वे वास्तव में http://stackoverflow.com/questions/11888144/name-variable-using-string-net/ पर मेरी पोस्ट में नमूना कोड के साथ ऑब्जेक्ट के गुण बन रहे हैं। 11893463 # 11893463, धन्यवाद –

+2

'त्रुटि प्राप्त करने के लिए' System.Collections.Generic.IDictionary 'को संदर्भ रूपांतरण, मुक्केबाजी रूपांतरण, अनबॉक्सिंग रूपांतरण, रैपिंग रूपांतरण के माध्यम से' System.Dynamicic.IDictionary 'में परिवर्तित नहीं किया जा सकता , या शून्य प्रकार रूपांतरण ' – TheVillageIdiot

4

यहां एक नमूना सहायक वर्ग है जो किसी ऑब्जेक्ट को परिवर्तित करता है और दिए गए ऑब्जेक्ट के सभी सार्वजनिक गुणों के साथ एक्सपोन्डो देता है।


    public static class dynamicHelper 
     { 
      public static ExpandoObject convertToExpando(object obj) 
      { 
       //Get Properties Using Reflections 
       BindingFlags flags = BindingFlags.Public | BindingFlags.Instance; 
       PropertyInfo[] properties = obj.GetType().GetProperties(flags); 

       //Add Them to a new Expando 
       ExpandoObject expando = new ExpandoObject(); 
       foreach (PropertyInfo property in properties) 
       { 
        AddProperty(expando, property.Name, property.GetValue(obj)); 
       } 

       return expando; 
      } 

      public static void AddProperty(ExpandoObject expando, string propertyName, object propertyValue) 
      { 
       //Take use of the IDictionary implementation 
       var expandoDict = expando as IDictionary; 
       if (expandoDict.ContainsKey(propertyName)) 
        expandoDict[propertyName] = propertyValue; 
       else 
        expandoDict.Add(propertyName, propertyValue); 
      } 
     } 

उपयोग:

//Create Dynamic Object 
dynamic expandoObj= dynamicHelper.convertToExpando(myObject); 

//Add Custom Properties 
dynamicHelper.AddProperty(expandoObj, "dynamicKey", "Some Value"); 
की
+1

"var expandoDict = exporto IDictionary के रूप में;" इस पंक्ति को "var expandoDict = expando को idictionary के रूप में बदलने की आवश्यकता है <स्ट्रिंग, ऑब्जेक्ट>;" –

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