2012-11-30 14 views
10

का उपयोग कर सी # 4.0 में मौजूदा ऑब्जेक्ट का विस्तार कैसे करें I C# में जावास्क्रिप्ट की प्रोटोटाइप प्रॉपर्टी के समान कुछ करना चाहते हैं।
विचार जावास्क्रिप्ट में आपके जैसे वर्ग के उदाहरण को विस्तारित करना है।
मुझे मिली सबसे नज़दीकी चीज़ ExpandoObject का उपयोग कर रही थी, लेकिन आप इसे किसी मौजूदा ऑब्जेक्ट से प्रारंभ नहीं कर सकते।
एक और समस्या यह है कि आप ExpandoObject से मूल ऑब्जेक्ट वापस प्राप्त कर सकते हैं।डायनेमिक्स

यहाँ है कि मैं क्या

var originalObject = new Person(); 
originalObject.name = "Will"; 
var extendedObject = new ExpandoObject(); 
extendedObject.lastName = "Smith"; 

//do something 

originalObject = (Person) extendedObject; 
+1

ऐसा लगता है जैसे आप स्थिर और गतिशील रूप से टाइप किए गए संदर्भों को मिश्रित करना चाहते हैं। आप ऐसा नहीं कर सकते –

+0

संबंधित https://weblog.west-wind.com/posts/2012/Feb/08/Creating-a- गतिशील-extensible-C-Expando-Object –

उत्तर

17

आप आंशिक रूप से की तरह कुछ का उपयोग कर समस्या का समाधान कर सकते हैं करना चाहते हैं:

public static class DynamicExtensions 
{ 
    public static dynamic ToDynamic(this object value) 
    { 
     IDictionary<string, object> expando = new ExpandoObject(); 

     foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType())) 
      expando.Add(property.Name, property.GetValue(value)); 

     return expando as ExpandoObject; 
    } 
} 

लेकिन आप नई ExpandoObject करने के तरीकों की नकल नहीं कर पा रहे

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