मैं रनटाइम पर अज्ञात प्रकार के वर्ग के गुणों को पढ़ने/लिखने के लिए प्रतिनिधि बनाने की कोशिश कर रहा हूं।अज्ञात प्रकारों के साथ बनाएँ डिलीगेट
मैं एक सामान्य वर्ग Main<T>
और एक तरीका है जिसके इस तरह दिखता है:
Delegate.CreateDelegate(typeof(Func<T, object>), get)
जहां get
संपत्ति है कि पढ़ा जाना चाहिए की एक MethodInfo
है। समस्या यह है कि जब संपत्ति int
लौटाती है (मुझे लगता है कि यह मूल्य प्रकारों के लिए होता है) उपरोक्त कोड ArgumentException फेंकता है क्योंकि विधि को बाध्य नहीं किया जा सकता है। स्ट्रिंग के मामले में यह अच्छी तरह से काम करता है।
समस्या को हल करने के लिए मैंने कोड बदल दिया ताकि संबंधित प्रतिनिधि प्रकार MakeGenericType
का उपयोग करके उत्पन्न हो। तो अब कोड है:
Type func = typeof(Func<,>);
Type generic = func.MakeGenericType(typeof(T), get.ReturnType);
var result = Delegate.CreateDelegate(generic, get)
समस्या अब है generic
की बनाई प्रतिनिधि उदाहरण तो मैं DynamicInvoke
जो शुद्ध प्रतिबिंब का उपयोग कर क्षेत्र को पढ़ने के लिए के रूप में के रूप में धीमी गति से किया जाएगा का उपयोग करना होगा।
तो मेरा सवाल यह है कि कोड का पहला स्निपेट मूल्य प्रकारों के साथ विफल रहता है। MSDN के अनुसार के रूप में यह कहा गया है कि
एक प्रतिनिधि की वापसी प्रकार एक विधि की वापसी प्रकार के साथ संगत है अगर विधि की वापसी प्रकार प्रतिनिधि की वापसी प्रकार से अधिक प्रतिबंधात्मक है यह काम करना चाहिए
और दूसरे स्निपेट में प्रतिनिधि को निष्पादित करने के लिए ताकि यह प्रतिबिंब से तेज़ हो।
धन्यवाद।
बहुत बहुत धन्यवाद, यह काम किया! – Giorgi