Я хочу сгенерировать IL для построения 2D-массива, используя System.Reflection.Emit
пространство имен.
Мой код C # равен
Array 2dArr = Array.CreateInstance(typeof(int),100,100);
Используя ildasm
, я понял, что после кода ILгенерируется для вышеуказанного кода C #.
IL_0006: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
IL_000b: ldc.i4.s 100
IL_000d: ldc.i4.s 100
IL_000f: call class [mscorlib]System.Array [mscorlib]System.Array::CreateInstance(class [mscorlib]System.Type,
int32,
int32)
Мне удалось сгенерировать три последних оператора IL, как показано ниже.
MethodInfo createArray = typeof(Array).GetMethod("CreateInstance",
new Type[] { typeof(Type),typeof(int),typeof(int) });
gen.Emit(OpCodes.Ldc_I4_1);
gen.Emit(OpCodes.Ldc_I4_1);
gen.Emit(OpCodes.Call, createArray);
Но у меня нет четкого представления о том, каксгенерировать первый оператор IL (т. е. IL_0006: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle
))
Есть ли у вас какие-либо идеи?
Кроме того, может кто-нибудь указать хорошие уроки / документы о том, как использовать пространство имен System.Reflection.Emitдля того, чтобы генерировать коды IL?