मैं किसी अज्ञात ऑब्जेक्ट को किसी विधि के लिए तर्क के रूप में लेना चाहता हूं, और उसके बाद प्रत्येक गुण/मान को गतिशील ExpandoObject
में जोड़ने के लिए अपनी गुणों को फिर से चालू करना चाहता हूं।मैं सी # में किसी अज्ञात ऑब्जेक्ट के गुणों पर कैसे पुन: प्रयास करूं?
तो क्या मैं जरूरत से
new { Prop1 = "first value", Prop2 = SomeObjectInstance, Prop3 = 1234 }
नाम और प्रत्येक संपत्ति के मूल्यों को जानने, और उन्हें ExpandoObject
में जोड़ने के लिए सक्षम होने के लिए जाने के लिए है।
मैं इसे कैसे पूरा करूं?
साइड नोट: यह मेरा इकाई परीक्षण के कई में किया जाएगा (मैं इसे उपयोग कर रहा हूँ सेटअप में कबाड़ का एक बहुत दूर refactor करने के लिए), इसलिए प्रदर्शन कुछ हद तक प्रासंगिक है। मैं प्रतिबिंब के बारे में यकीन है कि पर्याप्त के लिए कहने के लिए पता नहीं है, लेकिन मैं क्या समझ लिया है से यह बहुत प्रदर्शन भारी है, इसलिए यदि यह संभव है मैं नहीं बल्कि यह से बचने हूँ ...
फ़ॉलो-अप प्रश्न: जैसा कि मैंने कहा, मैं इस अज्ञात वस्तु को एक विधि के लिए तर्क के रूप में ले रहा हूं। विधि के हस्ताक्षर में मुझे किस डेटाटाइप का उपयोग करना चाहिए? यदि मैं object
का उपयोग करता हूं तो क्या सभी गुण उपलब्ध होंगे?
प्रतिबिंब प्रदर्शन वास्तव में बहुत भयानक नहीं है। यदि आपके पास बहुत बड़ी संख्या है, तो आपको इसे करने की आवश्यकता है, आप किसी दिए गए अनाम प्रकार के लिए PropertyInfo प्रविष्टियों को कैश कर सकते हैं और फिर प्रत्येक प्रॉपर्टी के गुणों को हल करने के लिए उन PropertyInfo प्रविष्टियों पर दोहरा सकते हैं। आप प्रत्येक प्रॉपर्टी के लिए GetMethod के लिए प्रतिनिधि भी बना सकते हैं और उनको कैश कर सकते हैं। –