Avatar billede svarrer Nybegynder
30. maj 2007 - 11:19 Der er 1 kommentar og
1 løsning

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
Avatar billede svarrer Nybegynder
30. maj 2007 - 13:23 #1
har fundet en løsning tak.
det field man loader skal (?) være statisk dvs. bruge Ldsfld istedet.
derudover skal man bruge Ldelem_ref for at få en reference til objektet.
Avatar billede arne_v Ekspert
31. maj 2007 - 01:59 #2
Hvorfor compiler du ikke C# kode på runtime - det gør koden lidt mere
letlæselig !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester