如何使用reflection获取variables名称?

例如,

static void Main() { var someVar = 3; Console.Write(GetVariableName(someVar)); } 

这个程序的输出应该是:

 someVar 

我怎样才能做到这一点使用reflection?

这是不可能的reflection,因为variables不会有一个名字一旦编译到IL。 但是,您可以使用expression式树并将该variables提升为闭包:

 static string GetVariableName<T>(Expression<Func<T>> expr) { var body = (MemberExpression)expr.Body; return body.Member.Name; } 

你可以使用这个方法如下:

 static void Main() { var someVar = 3; Console.Write(GetVariableName(() => someVar)); } 

请注意,这非常慢,所以不要在应用程序的性能关键path中使用它。 每次这个代码运行时,会创build几个对象(这会导致GC压力),并在封面下面调用许多不可插入的方法,并使用一些沉重的reflection。

有关更完整的示例,请参阅此处 。

UPDATE

在C#6.0中, nameof关键字被添加到语言中,这使我们能够执行以下操作:

 static void Main() { var someVar = 3; Console.Write(nameof(someVar)); } 

这显然更方便,并且将string定义为常量string的成本相同。

你不能用reflection。 GetVariableName传递数字3,而不是一个variables。 你可以通过代码检查IL来做到这一点,但这可能是太困难了。