Reflection.Emit load af Objekt fra array
Hejsa..Jeg forsøger at lave en dynamisk metode vha Reflection.Emit.
ideen er at den ud fra en parameter kunne returnere et objekt fra et array.
ala:
//------------------------
array[] a = {new Class4(), new Class4()}
if(id == 5)
return a[0];
else
return a[1];
//------------------------
problemet består i at jeg ikke kan få loaded det objekt jeg ønsker til stacken, samt at der er en række opcodes der måske kan bruges?! LdObj, LdInd_ref, osv.
nedenstående kode forsøger blot at hente et element (en class4 instans) ud af mit array (defineret i class3) og herefter returnere denne.
//-----------MSIL kode----------
ILGenerator ilGen = MethodGenerator.GetILGenerator();
LocalBuilder locBuilder = ilGen.DeclareLocal(typeof(Class4));
FieldInfo field = typeof(Class3).GetField("array");
ilGen.Emit(OpCodes.Ldfld, field); //loader arrayet
ilGen.Emit(OpCodes.Ldc_I4_1);
ilGen.Emit(OpCodes.Ldelem); //loader element 1
ilGen.Emit(OpCodes.Stloc, locBuilder); //gemmer
ilGen.Emit(OpCodes.Ldloc, locBuilder); //henter
ilGen.Emit(OpCodes.Ret); //returnere array[1]
Men dette virker ikke!?.. og den fantastiske fejlkode hjælper ikke meget: "Common Language Runtime detected an invalid program"
Håber der er nogen der kan hjælpe derude..?!
på forhånd tak