Hey,

On Thu, May 6, 2010 at 3:39 AM, Timwi <[email protected]> wrote:
> class SomeGenericType<T1, T2> {
>  void SomeMethod(T1 t1, T2 t2) { /* ... */ }
> }
>
> Now suppose I have a MethodReference that refers to a specific
> instance of this, e.g.
>
>    SomeGenericType`2<string,int>::SomeMethod(!0,!1)
>
> Is there an easy way to get the original method?
>
>    SomeGenericType`2::SomeMethod(T1,T2)

There's no straightforward process. The declaring type will be a
GenericInstanceType, so you may write something like:

                public static MethodReference GetOpenMethod (this 
MethodReference self)
                {
                        var reference = new MethodReference {
                                Name = self.Name,
                                DeclaringType = 
self.DeclaringType.GetElementType (),
                                HasThis = self.HasThis,
                                ExplicitThis = self.ExplicitThis,
                                ReturnType = self.ReturnType,
                                CallingConvention = 
MethodCallingConvention.Generic,
                        };

                        foreach (var parameter in self.Parameters)
                                reference.Parameters.Add (new 
ParameterDefinition
(parameter.ParameterType));

                        foreach (var generic_parameter in 
self.GenericParameters)
                                reference.GenericParameters.Add (new 
GenericParameter (reference));

                        return reference;
                }


-- 
Jb Evain  <[email protected]>

-- 
--
mono-cecil

Reply via email to