Как загрузить значения объект в локальную переменную?
Вот можно устанавливать Int32 константы, а как объекты и структуры и адреса так же установить.
Есть еще опкод LdStr который на стек строку(Объект) кладет, а как готовый объект положить или ссылку или адрес.
Вот например тут в коде, создается объект new Random() каждый раз,
Как исправить, как можно сохранить как локальную переменную, ссылку или указатель, или сам объект на объект Random rand;
Предположим какой-то такой код, хочу понять как константы раставить, что бы не передавать в параметрах их
void remTest(){ref Random rand){ // предположим Random struct
var il = dm.GetILGenerator();
il.DeclareLocal(typeof(int));
il.DeclareLocal(typeof(int));
il.Emit(OpCodes.Ldc_I4, 100); // вот можно константу значение сделать,
// а как сделать константу объект.
il.Emit(OpCodes.Stloc_0);
il.Emit(OpCodes.Newobj, typeof(Random).GetConstructor(Type.EmptyTypes));
il.Emit(OpCodes.Callvirt, typeof(Random).GetMethod("Next", Type.EmptyTypes));
il.Emit(OpCodes.Stloc_1);
il.Emit(OpCodes.Ldloc_1);
il.Emit(OpCodes.Ldloc_0);
il.Emit(OpCodes.Rem);
il.Emit(OpCodes.Stsfld, typeof(main).GetField("Res" ));
il.Emit(OpCodes.Ret);
///....
/// вот так выглядит код функция для которой код выше. .
///как избавиться от new Random(), и при создании ссылку на 1 объект(
///код <b>осмыслять</b> не нужно, типа искать поле Random.Shared, или какое-либо поле)
void ____f(){
int a=100;
int b;
b=new Random().Next();
Program.Res=a%b;
}
// вот такой должен быть итоговый код функции, как его составить?
void ____f(){
int a=100;
nuint address=address;
b=((Random*)address).Next(); // вместо рандома другая структура будет,
Program.Res=a%b;
}
Action _create____f(Random rand){ где-то тут при создании address=Unsafe.AsPointer<Random>(ref rand); ..... }