У меня есть метапрограмма, которая должна создать код для инициализации полей значений. I.e. имеют классОтражение излучение. Обобщение Ldc_R8 и Ldc_I4_0
class Class1
{
int i;
double t;
Class1()
{
i=5;
t=3;
}
}
В отражении это выглядит следующим образом:
...
gen.Emit(OpCodes.Ldc_I4,5);
...
gen.Emit(OpCodes.Ldc_R8,3);
...
Я не хочу иметь огромный переключатель, как это:
switch(t)
{
case typeof(int): gen.Emit(OpCode.Ldc_I4,value); break;
case typeof(double): gen.Emit(OpCodes.Ldc_R8,value); break;
// and so on for all value types
}
Есть некоторые универсальные значения нагрузки на оценочный стек OpCode? Или мне нужен переключатель, упомянутый выше?
Несомненно, 'float' не' R8'! Вы имели в виду 'double'? – leppie
Вам понадобится гигантский переключатель, и, пожалуйста, разместите его здесь, где вы закончите, чтобы другие могли его использовать :) –
Кстати, у вас есть только ограниченный диапазон, я не вижу проблемы с кодированием большого переключателя. Сделай это один раз, и все готово! – leppie