मुझे पता है कि इस साइट पर कुछ जवाब हैं और मैं क्षमा चाहता हूं अगर यह किसी भी तरह से डुप्लिकेट है, लेकिन जो भी मैंने पाया है वह वह नहीं करता जो मैं कोशिश कर रहा हूं कर।अभिव्यक्ति का उपयोग कर किसी विधि का नाम प्राप्त करें
मैं विधि जानकारी निर्दिष्ट करने की कोशिश कर रहा हूं ताकि मैं तारों का उपयोग न करके एक प्रकार सुरक्षित तरीके से नाम प्राप्त कर सकूं। तो मैं इसे अभिव्यक्ति के साथ निकालने की कोशिश कर रहा हूं।
MemberInfo GetMethodInfo<T>(Expression<Action<T>> expression)
{
return ((MethodCallExpression)expression.Body).Method;
}
मैं इस प्रकार सहायक विधि कॉल कर सकते हैं:
public interface IMyInteface
{
void DoSomething(string param1, string param2);
}
वर्तमान में मैं नाम इस पद्धति का उपयोग कर सकते हैं:
मैं इस इंटरफ़ेस में एक विधि का नाम प्राप्त करना चाहते हैं कहो :
var methodInfo = GetMethodInfo<IMyInteface>(x => x.DoSomething(null, null));
Console.WriteLine(methodInfo.Name);
लेकिन मैं इस संस्करण की तलाश में हूं कि मुझे निर्दिष्ट किए बिना विधि का नाम मिल सकता है मापदंडों (शून्य, नल)
इस तरह:
var methodInfo = GetMethodInfo<IMyInteface>(x => x.DoSomething);
लेकिन सभी प्रयास
वहाँ यह करने के लिए एक रास्ता है संकलित करने के लिए असफल हो?
इस समय वीएस नहीं है, लेकिन मुझे लगता है कि आपको गैर-सामान्य विकल्प में 'प्रतिनिधि' या 'क्रिया <स्ट्रिंग, स्ट्रिंग>' स्वीकार करने का प्रयास करना चाहिए। इस मामले में आपको एक विधि समूह – Snowbear
पास करने में सक्षम होना चाहिए यदि मैं इनपुट में इनपुट बदलता हूं तो यह संकलित नहीं होगा और त्रुटि विधि समूह को प्रतिनिधि में परिवर्तित नहीं कर सकती है। अगर मैं इसे एक्शन <स्ट्रिंग में बदलता हूं, स्ट्रिंग> यह काम करता प्रतीत होता है लेकिन अभिव्यक्ति को यूनरीएक्सप्रेस में परिवर्तित कर दिया जाता है और विधि शून्य होती है और मैं नहीं देख सकता कि यह UnaryExpression – Andre
एफ़टर कनवर्टिंग से कहां प्राप्त करें .. क्या आपने 'var methodInfo को आजमाया है = GetMethodInfo (DoSomething); 'var methodInfo = GetMethodInfo (x => x.DoSomething) के बजाय' '? साथ ही, मुझे अभी भी लगता है कि निर्दिष्ट (डिफ़ॉल्ट (स्ट्रिंग), डिफ़ॉल्ट (स्ट्रिंग)) - अधिक पठनीय है, और आप इस मामले में ओवरलोडिंग विधियों का समर्थन कर सकते हैं –