如果我有这样的代码:
public class Program { public static void Main() { string bar = ""; int foo = 24; } }
我可以得到在Main中声明的局部变量:
var flag = BindingFlags.Static | BindingFlags.Public; var fields = typeof(Program).GetMethod("Main",flags).GetMethodBody().LocalVariables;
这返回一个IList< LocalVariableInfo>而LocalVariableInfo
只有三个属性:IsPinned,LocalIndex和LocalType.So,没有Name属性存在.
.method public hidebysig static void Main() cil managed { .entrypoint // Code size 11 (0xb) .maxstack 1 .locals init ([0] string bar,[1] int32 foo) IL_0000: nop IL_0001: ldstr "" IL_0006: stloc.0 IL_0007: ldc.i4.s 24 IL_0009: stloc.1 IL_000a: ret } // end of method Program::Main
但是不可能使用Reflection来获取它们.因为本地变量没有名称,并且只能由它们的索引访问(如果是ILDASM.exe如何显示名称),或者因为这样的功能不是实施?或者如果可能使用另一种方式,那么问题将是如何?
注意:我已经看到了一些像this这样的问题,其中大多数是使用表达式来获取变量名.如果我想获得所有本地人,包括由编译器生成的临时变量,它不起作用.