2010-10-24 16 views
6

मैं किसी फ़ंक्शन के अंदर एक अनाम प्रकार बनाना चाहता हूं, जब अनाम प्रकार गुण फ़ंक्शन पैरामीटर होते हैं।प्रतिबिंब से एक अनाम प्रकार बनाएं ParamInfo []

उदाहरण के लिए, फ़ंक्शन के लिए: निजी बूल CreatePerson (स्ट्रिंग फर्स्टनाम, स्ट्रिंग LasName, int आयु, int ऊंचाई);

मेरे पास गुणों के साथ एक अनाम प्रकार होगा: फर्स्टनाम, LasName, आयु और ऊंचाई। और फ़ंक्शन पैरामीटर के मान अनाम प्रकार गुणों के मान होंगे।

private bool CreatePerson(string FirstName, string LasName, int Age, int height) 
    { 
     // Get this method parameters 
     MethodBase currentMethod = MethodBase.GetCurrentMethod(); 
     ParameterInfo[] parametersInfo = currentMethod.GetParameters(); 

     // create an object of the parameters from the function. 
     foreach (ParameterInfo paramInfo in parametersInfo) 
     { 
      // add a property with the name of the parameter to an anonymous object and insert its value to the property. 
      // WHAT DO I DO HERE? 
      .... 
     } 

     return true; 
    } 
+0

आप ज्ञात फ़ील्ड नामों और प्रकारों के साथ एक अनाम प्रकार बनाना चाहते हैं, आपको प्रतिबिंब की आवश्यकता क्यों है? नया {फर्स्टनाम = फर्स्टनाम, ...} ठीक होगा? – SoftMemes

+0

वह चाहता है कि रनटाइम में परिभाषित किया जाए - मुझे विश्वास है। – Aliostad

+0

@Aliostad - लेकिन विवरण केवल यह बताता है कि _values_ पैरामीटर से आना चाहिए, पैरामीटर/गुणों के नाम पहले से ही हैं ... – SoftMemes

उत्तर

2

यदि मैं सही ढंग से समझ गया और आप रनटाइम पर गुणों को परिभाषित करना चाहते हैं, तो यह संभव नहीं है। यद्यपि अज्ञात प्रकारों में आप उन प्रकारों को बनाने में सक्षम हो सकते हैं जिन्हें आप परिभाषित करते हैं और फिर मान निर्दिष्ट करके, गुणों का नाम संकलित समय पर जाना जाना चाहिए।

वास्तव में, प्रकार आपके लिए अज्ञात है लेकिन सीएलआर पर नहीं है। यदि आप ildasm.exe या परावर्तक में असेंबली को देखते हैं, तो आप इन अज्ञात नामों को अजीब नामों के साथ हमेशा अपने नामों में <> देख पाएंगे।

सी # के गतिशील यहाँ मदद करने में सक्षम हो सकता है, लेकिन जहाँ तक मुझे पता है, वे वस्तुओं के साथ संवाद स्थापित कर रहे हैं कि हम के लिए प्रकार की जानकारी नहीं है के साथ मदद, बनाने नहीं है - लेकिन एक तरह से मुझे क्या करना है कि हो सकता है नहीं जानता।

+0

प्रतिबिंब का उपयोग करना काफी संभव होगा। हालांकि रनटाइम पर एक नया प्रकार उत्पन्न करने के लिए प्रवेश करें, लेकिन मैं नहीं देख सकता कि आप ऐसा कुछ क्यों करना चाहते हैं। – SoftMemes

+0

सच है, लेखन कोड और संकलन हमेशा एक संभावना है लेकिन वह ऐसा नहीं करना चाहता है। – Aliostad

+0

प्रतिबिंब। प्रवेश वास्तव में "कोड लिखना और संकलित करना" नहीं है क्योंकि कोई स्रोत कोड नहीं है, लेकिन मैं मानता हूं कि उसकी आवश्यकता नहीं है। – SoftMemes

0

क्या आप "लिंक से डेटासेट" Field<T>(String Name) डिज़ाइन पैटर्न का उपयोग नहीं कर सकते? वास्तव में क्यों न केवल डेटाटेबल का उपयोग करें। कंपाइलर को यह जानने की आवश्यकता नहीं है कि फ़ील्ड मौजूद है, केवल टाइप टाइप करना सुरक्षित है। ऐसा करने का एक कारण फिल्टर उत्पन्न करने के लिए कुछ प्रकार के पार्सर को कार्यान्वित करना होगा, या क्षेत्र के नामों को गतिशील रूप से कॉन्फ़िगर करना होगा।

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