È possibile utilizzare i generici con IL Generator?generici con IL?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
È possibile utilizzare i generici con IL Generator?generici con IL?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
Sì, è possibile, ma non con la classe DynamicMethod
. Se sei limitato ad usare questa classe, sei sfortunato. Se invece è possibile utilizzare un oggetto MethodBuilder
, continua a leggere.
L'emissione del corpo di un metodo generico non è diversa dall'emissione del corpo di altri metodi, ad eccezione del fatto che è possibile creare variabili locali dei tipi generici. Ecco un esempio di creazione di un metodo generico utilizzando MethodBuilder
con il generico tesi T e creando un locale di 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]);
per emettere una chiamata a tale metodo generico da un altro metodo, utilizzare questo codice. Supponendo method
è un oggetto MethodInfo
o MethodBuilder
che descrive una definizione di metodo generico, è in grado di emettere una chiamata a quel metodo con il singolo parametro generico int
come segue:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));
Invece di chiamare 'GetGenericArguments()' puoi usare l'array restituito da 'DefineGenericParameters()'. – svick
Grazie, non lo sapevo. È riparato ora. – aboveyou00
Grazie a @svick e aboveyouOO. Ho letto su SO che non era possibile, e ho pensato di chiedere comunque - speravo che quella informazione potesse essere stata per una versione precedente di .net – sgtz
possibile duplicato di [DynamicMethod con parametri di tipo generico] (http : //stackoverflow.com/questions/788618/dynamicmethod-with-generic-type-parameters) –
Non è chiaro dalla tua domanda: vuoi creare un metodo generico o semplicemente utilizzare qualche tipo generico (o metodo) al suo interno? – svick
@svick: voglio creare dinamicamente un metodo generico. – sgtz