cnahbb 发表于 2019-11-27 10:35

C# 请教一个方法中取传递参数的变量nameof的问题

本帖最后由 cnahbb 于 2019-11-27 11:17 编辑

```
static void Log(int val)
{
      Console.WriteLine("{0}:{1}", nameof(val), val);
}

static void Main(string[] args)
{
      int a = 1234;
      Log(a);
      //这里输出 "val:1234",有没有办法输出"a:1234",a是传入变量的名字
}
```
谢谢大家

Light紫星 发表于 2019-11-27 10:54

你把a的名字传进去呢

德古拉伯 发表于 2019-11-27 10:58

log形参改为a

Light紫星 发表于 2019-11-27 10:59

或者这样写

    class Program
    {
      static void Log<T>(Expression<Func<T>> expression)
      {
            var me = expression.Body as MemberExpression;
            var name = me.Member.Name;
            var value = expression.Compile().Invoke();
            Console.WriteLine(name);
            Console.WriteLine(value);
      }
      static void Main(string[] args)
      {
            int a = 1234;
            Log(()=>a);
            //这里输出 "val:1234",有没有办法输出"a:1234",a是传入变量的名字
      }
    }

另类飞翔 发表于 2019-11-27 11:12

      /// <summary>
      /// 获取变量名称
      /// </summary>
      /// <param name="exp"></param>
      /// <returns>return string</returns>
      public static string GetVarName<T>(System.Linq.Expressions.Expression<Func<T, T>> exp)
      {
            return ((System.Linq.Expressions.MemberExpression)exp.Body).Member.Name;
      }

      bool test_name = true; //变量类型可随意
      string tips = test_name.GetVarName(it => test_name);

cnahbb 发表于 2019-11-27 11:17

另类飞翔 发表于 2019-11-27 11:12
///
      /// 获取变量名称
      ///


谢谢大佬

cnahbb 发表于 2019-11-27 11:17

德古拉伯 发表于 2019-11-27 10:58
log形参改为a

兄弟 这是掩耳盗铃啊

cnahbb 发表于 2019-11-27 11:18

Light紫星 发表于 2019-11-27 10:59
或者这样写

    class Program


谢谢大佬
页: [1]
查看完整版本: C# 请教一个方法中取传递参数的变量nameof的问题