如何使用反射获取变量名称?

这个问题在这里已经有了答案:

  • 找到传递给函数的变量名称16个答案

  • 这是不可能的反射,因为一旦编译为IL,变量就不会有名称。 但是,您可以使用表达式树并将变量提升为闭包:

    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));
    }
    

    请注意,这非常慢,因此请勿在应用程序的性能关键路径中使用它。 每次运行该代码时,都会创建几个对象(这会导致GC压力),并且在封面下会调用许多不可插入的方法,并使用一些沉重的反射。

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

    UPDATE

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

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

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


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

    链接地址: http://www.djcxy.com/p/69025.html

    上一篇: How to get variable name using reflection?

    下一篇: Finding the variable name passed to a function