4
我想使用System.Reflection.Emit
命名空間爲2D陣列構造生成IL。爲2D陣列生成IL
我的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代碼的好教程/文檔?
非常感謝,這真的幫助我 – 2011-06-07 18:12:05