【发布时间】:2012-02-18 23:48:46
【问题描述】:
我有元程序,需要创建用于初始化值字段的代码。 IE。上课
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? -
你需要这个巨大的开关,请把它贴在你完成的地方,以便其他人可以使用它:)
-
顺便说一句,你只有一个有限的范围来处理,我没有看到编码一个大开关的问题。做一次,你就完成了!
-
你不必初始化局部变量,CLR将它们初始化为0。
-
Hans 是对的——CLR 保证局部变量自动归零。因此,这些作业根本没有意义。
标签: c# .net reflection metaprogramming reflection.emit