对于一个简单的方法,没有局部变量像MethodInfo.GetMethodBody以下MethodBody.LocalVariables计数是混淆
public static int Test1(short i, long j)
{
j = i + j;
switch (j)
{
case 1:
j = 2;
break;
default:
j = 11;
break;
}
return j;
}
计数()。LocalVariables.Count = 2为什么? 添加另一个switch语句,计数变为3为什么?
public static int Test1(short i, long j)
{
j = i + j;
switch (j)
{
case 1:
j = 2;
break;
default:
j = 11;
break;
}
switch (i)
{
case 1:
j = 2;
break;
default:
j = 11;
break;
}
return j;
}
没有定义局部变量。那么,为什么2和3. 另外,如果另一个开关语句与j保持计数在2.
使用[ILdasm](http://msdn.microsoft.com/en-us/library/f7dy01k1.aspx)或任何其他IL反汇编程序,并找出变量的用途。 – dtb 2012-03-17 00:35:46
由于将'long'('j')隐式转换为'int'(返回值),所以这甚至没有编译。 – 2012-03-17 00:37:57
编译器缺陷的位,它添加它实际上不使用的局部变量。这些当地人很常见。 – 2012-03-17 01:41:54