2012-05-05 23 views
5

द्वारा अधिभारित विधि को कैसे ढूंढें यह another question I asked before से जुड़ा एक प्रश्न है। मेरे पास एक अधिभारित विधि है:प्रतिबिंब

public void Add<T>(SomeType<T> some) { } 

public void Add<T>(AnotherType<T> another) { } 

प्रतिबिंब द्वारा प्रत्येक विधि को मैं कैसे ढूंढ सकता हूं? जैसे मैं प्रतिबिंब द्वारा Add<T>(SomeType<T> some) विधि कैसे प्राप्त कर सकता हूं? कृपया क्या आप मेरी मदद कर सकते हैं? अग्रिम में धन्यवाद।

MethodInfo सदस्यों में

उत्तर

6

यह चाल यहां वर्णित है कि आप पैरामीटर SomeType<T> होना चाहते हैं, जहां TAdd विधि का सामान्य प्रकार है।

इसके अलावा, यह मानक प्रतिबिंब का उपयोग करने के बारे में है, जैसे कि CastroXXL ने अपने उत्तर में सुझाव दिया था।

यहाँ कैसे मैंने किया है:

var theMethodISeek = typeof(MyClass).GetMethods() 
    .Where(m => m.Name == "Add" && m.IsGenericMethodDefinition) 
    .Where(m => 
      { 
       // the generic T type 
       var typeT = m.GetGenericArguments()[0]; 

       // SomeType<T> 
       var someTypeOfT = 
        typeof(SomeType<>).MakeGenericType(new[] { typeT }); 

       return m.GetParameters().First().ParameterType == someTypeOfT; 
      }) 
    .First(); 
+0

यह काम करता है। तो धन्यवाद –

+0

क्षमा करें, एक और बिंदु। यह पता लगाने के लिए कि कोई प्रकार सामान्य प्रकार की बाधाओं का पालन करता है या नहीं? –

+0

'टाइपऑफ (कुछ प्रकार <>) पर डीबगर के साथ एक झांक लें। GetGenericArguments()। पहले()। GetGenericParameterConstraints()' और 'Type.IsAssignableFrom' विधि देखें: http://msdn.microsoft.com/en- हमें/लाइब्रेरी/system.type.isassignablefrom.aspx मुझे लगता है कि उन्हें संयोजित करने से आप जो चाहते हैं उसे प्राप्त करेंगे – GolfWolf