मुझे सी # का उपयोग करके प्रतिबिंब के माध्यम से एक प्रकार पर विधियों को आमंत्रित करने की आवश्यकता है।सी # में प्रतिबिंब का उपयोग करते हुए विधि का आह्वान करते समय पैरामीटर के लिए स्वचालित प्रकार रूपांतरण कैसे करें?
रन-टाइम पर, मेरे डेटा में एक शब्दकोश होगा जिसमें नाम/मूल्य जोड़े होंगे। शब्दकोश में नाम मैं जिस विधि का आह्वान करूंगा उस पर पैरामीटर नामों के अनुरूप होगा। साथ ही, रन-टाइम पर, मेरे पास एक मनमाना असेंबली योग्य प्रकार का नाम और एक विधि नाम होगा। डिज़ाइन समय पर, मुझे प्रकार और विधि का कोई ज्ञान नहीं होगा, यह विधि टाइप int, स्ट्रिंग, डेटटाइम, बूल, int [], स्ट्रिंग [], डेटटाइम [] या बूल के पैरामीटर की एक चर संख्या को स्वीकार करेगी []।
मुझे उस बिंदु पर कोई समस्या नहीं है जहां मैं प्रतिबिंब का उपयोग करके प्रकार का उदाहरण बना सकता हूं और विधि का आह्वान कर सकता हूं। मैं बिंदु जहां मैं विधि जब मैं फोन द्वारा आवश्यक उचित प्रकार के लिए मेरे शब्दकोश में स्ट्रिंग मान परिवर्तित करने के लिए है पर अटक कर रहा हूँ:
someMethodInfo.Invoke(instance, new [] { ... })
मुझे पता है कि मैं शायद MethodInfo.GetParameters के माध्यम से गणना करने की जरूरत है() और प्रत्येक पैरामीटर के लिए प्रकार रूपांतरण प्रदर्शन करते हैं। मैं यह समझने की कोशिश कर रहा हूं कि यह कैसे करें, और आदर्श रूप से, इसे कुशलतापूर्वक कैसे करें।
मेरे शोध में अब तक एमवीसी स्रोत कोड में खुदाई शामिल है क्योंकि यह एक्शनमेड में फॉर्म वैल्यू पास करते समय कुछ समान होता है। मुझे ActionMethodDispatcher मिला लेकिन यह LINQ अभिव्यक्तियों का उपयोग करता है, जिसके साथ मैं अपरिचित हूं।
मैंने एसओ पर भी इसी तरह के प्रश्नों को देखा, लेकिन मेरे प्रश्न का उत्तर देने वाले कुछ भी नहीं मिला।
मैं किसी समाधान के लिए किसी भी पॉइंटर्स का स्वागत करता हूं।
इसके बारे में जाने के लिए बेहतर तरीके हो सकते हैं, लेकिन मैं का उपयोग किया है [System.Convert] (http://msdn.microsoft.com/en-us/library/system। convert.aspx) समान आवश्यकताओं के लिए। नूलबे प्रकारों से निपटने से कुछ अतिरिक्त जटिलता भी मिलती है। – Clayton
अधिक मनमानी रूपांतरण के लिए एक और विकल्प [TypeConverter] है (http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter (v = VS.100) .aspx), हालांकि मैं नहीं हूं सुनिश्चित करें कि यह सरणी के साथ कैसे काम करेगा। –
@ क्लेटन हां, मुझे लगता है कि सिस्टम। अगर कुछ और सुरुचिपूर्ण नहीं है तो कनवर्ट मेरी फॉलबैक होगी।ऐसा लगता है कि प्रत्येक पैरामीटर प्रकार के माध्यम से लूपिंग और सिस्टम का उपयोग करने से अधिक कुशल तरीका हो सकता है। व्यक्तिगत प्रकार के रूपांतरण करने के लिए स्विच (...) में कनवर्ट करें। –