Да, это возможно, но не с классом DynamicMethod
.Если вы ограничены в использовании этого класса, вам не повезло.Если вместо этого вы можете использовать объект MethodBuilder
, читайте дальше.
Излучение тела универсального метода для большинства намерений и целей ничем не отличается от излучения тела других методов, за исключением того, что вы можете сделатьлокальные переменные универсальных типов.Вот пример создания универсального метода с использованием MethodBuilder
с универсальным аргументом T и создания локального типа 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]);
Чтобы отправить вызов этого универсального метода из другого метода, используйте этот код,Предполагая, что method
является MethodInfo
или MethodBuilder
объектом, описывающим определение универсального метода, вы можете отправить вызов этому методу с единственным универсальным параметром int
следующим образом:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));