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