如果我有这样的代码:
- 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这样的问题,其中大多数是使用表达式来获取变量名.如果我想获得所有本地人,包括由编译器生成的临时变量,它不起作用.