Cheers. Weird i could not find it in cecil.rocks today. I'll check again when 
im on a pc.  Ta

Sent from my HTC

----- Reply message -----
From: "Gábor Kozár" <[email protected]>
To: <[email protected]>
Subject: [mono-cecil] Calling methods of generic types
Date: Mon, May 2, 2011 9:22 pm
These extension methods from Mono.Rocks can be helpful (I think I copied them 
as-is, just with a different name).   
public static TypeReference MakeGenericType(this TypeReference self, params 
TypeReference[] arguments)
{
                if (self.GenericParameters.Count != arguments.Length)
                        throw new ArgumentException();


                var instance = new GenericInstanceType(self);
                foreach (var argument in arguments)
                        instance.GenericArguments.Add(argument);

                return instance;

}
 
public static MethodReference MakeHostInstanceGeneric(this MethodReference 
self, params TypeReference[] arguments) 
{
                var reference = new MethodReference(self.Name, self.ReturnType, 
self.DeclaringType.MakeGenericType(arguments))
                {
                        HasThis = self.HasThis,
                        ExplicitThis = self.ExplicitThis,

                        CallingConvention = self.CallingConvention
                };

                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(generic_parameter.Name, reference));

                return reference;

 }

Then, assuming you have the TypeDefinition of MyClass<T, Y>:
myClassTypeDef.Methods.Single(m => m.Name == 
"Something").MakeHostInstanceGeneric(myModule.TypeSystem.Int32, 
myModule.TypeSystem.String);

2011/5/2 Hendry Luk <[email protected]>

I'm sure this question has been asked so many times before, but I can't seem to 
find a satisfying answer for it .

How do I get Cecil to emit a call to static method 'Something' on the following 
generic class?



public static class MyClass<T, Y>
{
    public static void Something(int a, string b, object c)
    {
    }
}

And I intend to call MyClass<int, string>.Something(int, string, object);



What's the right way to achieve that?

Thanks before
Hendry




-- 

--

mono-cecil




-- 
--
mono-cecil

-- 
--
mono-cecil

Reply via email to