2013-05-28 11 views
5

मैं दो कार्य है:Type.GetMethod सभी तरीके के माध्यम से पाशन के बिना जेनेरिक MethodInfo जाओ

  1. public void DeleteRecord(int id);
  2. public T DeleteRecord<T>(int id);

यहाँ कैसे मैं गतिशील रूप से सामान्य आह्वान करने के लिए कोशिश कर रहा है विधि:

MethodInfo method = typeof(DAL).GetMethod("DeleteRecord", new[] { typeof(int) }); 
MethodInfo generic = method.MakeGenericMethod(returnType); 
object o = generic.Invoke(null, new object[] { dbname, spname, expandoAsDictionary }); 

पहली पंक्ति टी एक अपवाद है क्योंकि यह एक अस्पष्ट परिभाषा पाता है। क्या GetMethods का उपयोग किए बिना जेनेरिक विधि के MethodInfo और IsGenericMethod के लिए पूछे जाने वाले परिणामों के माध्यम से लूपिंग करने का कोई तरीका है?

संपादित करें: कृपया 'डुप्लिकेट' को हटा दें क्योंकि दोनों सुझाए गए उत्तरों या तो इसे आंतरिक लूप (GetMethods()। चुनें ...) के साथ हल करें या ओवरलोड को भी संबोधित न करें।

+0

यह एक डुप्लिकेट नहीं है। मुझे पहले से ही पता है कि प्रतिबिंब के साथ एक सामान्य विधि को कैसे कॉल करें, लेकिन मेरे पास एक अस्पष्ट परिभाषा अपवाद है। कृपया मेरे प्रश्न को पढ़ें। –

+0

यह एक डुप्लिकेट है, लेकिन मैंने गलत सवाल लिंक किया है, क्षमा करें ... यहां सही है: http://stackoverflow.com/q/5218395/201088। –

+1

अभी भी कोई डुप्लिकेट नहीं है! मैंने स्पष्ट रूप से पूछा कि GetMethods() फ़ंक्शन का उपयोग किये बिना इसे कैसे किया जाए। आपके लिंक में चिह्नित उत्तर इसका उपयोग कर रहा है ... –

उत्तर

0
शायद नहीं

अपने समस्या के लिए सही समाधान है, लेकिन हो सकता है आप इस समाधान के साथ खुश हो सकता है:

var generic = typeof(BadFoo).GetMethods().FirstOrDefault(p => p.IsStatic == true && p.Name == "DeleteRecord" && p.ReturnType == typeof(Int32)); 

मैं विधि के लिए सोचा था कि वहाँ एक "FullName" की तरह हो सकता है, के साथ ऐसा GetMethod() कैलेस हो सकता है अद्वितीय विधि प्राप्त करने के लिए एक पूर्ण नाम। लेकिन नाम से विधि में कोई अन्य संपत्ति नहीं है।

+0

कृपया मेरे प्रश्न को पढ़ें। मैंने पूछा कि GetMethods के बिना यह कैसे करें() :) –

+0

जैसा मैंने कहा, यह सही समाधान नहीं है। लेकिन कम से कम आप "परिणामों के माध्यम से लूपिंग नहीं करेंगे" –

+0

आपके उत्तर के लिए धन्यवाद, मैं इसका उपयोग करने पर विचार करूँगा ... मैं उच्च स्तर पर विधियों के बीच अंतर करने का एक तरीका ढूंढ रहा हूं क्योंकि आपके समाधान में अभी भी है दृश्यों के पीछे एक लूप (FirstOrDefault) –

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