¿Es posible usar genéricos con IL Generator?genéricos con IL?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
¿Es posible usar genéricos con IL Generator?genéricos con IL?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
Sí, es posible, pero no con la clase DynamicMethod
. Si está restringido a usar esta clase, no tiene suerte. Si puede usar un objeto MethodBuilder
, siga leyendo.
Emitir el cuerpo de un método genérico es, para la mayoría de los propósitos, no es diferente de emitir el cuerpo de otros métodos, excepto que puede hacer variables locales de los tipos genéricos. Aquí está un ejemplo de la creación de un método genérico usando MethodBuilder
con el argumento genérico T y la creación de un local del tipo T:
MethodBuilder method;
//... Leaving out code to create MethodBuilder and store in method
var genericParameters = method.DefineGenericParameters(new[] { "T" });
var il = method.GetILGenerator();
LocalBuilder genericLocal = il.DeclareLocal(genericParameters[0]);
para emitir una llamada a ese método genérico de otro método, utilice este código. Suponiendo method
es un objeto MethodInfo
o MethodBuilder
que describe una definición de método genérico, que puede emitir una llamada a ese método con el parámetro genérico único int
como sigue:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));
En lugar de llamar a 'GetGenericArguments()' puede usar la matriz devuelta por 'DefineGenericParameters()'. – svick
Gracias, no lo sabía. Está arreglado ahora. – aboveyou00
Gracias @svick y aboveyouOO. Leí en SO que no era posible, y pensé en preguntar de todos modos, esperaba que esa información podría haber sido para una versión anterior de .net – sgtz
posible duplicado de [DynamicMethod con parámetros de tipo genérico] (http : //stackoverflow.com/questions/788618/dynamicmethod-with-generic-type-parameters) –
No está claro a partir de su pregunta: ¿desea crear un método genérico o simplemente usar algún tipo genérico (o método) dentro de él? – svick
@svick: Quiero crear dinámicamente un método genérico. – sgtz