代码之家  ›  专栏  ›  技术社区  ›  KevinT

确定用作方法参数的变量的名称

  •  2
  • KevinT  · 技术社区  · 17 年前

    例子:

    public void MyTestMethod1()
    {
      string myVar = "Hello World";
      MyTestMethod2(myVar);
    }
    
    public void MyMethod2(string parm)
    {
      // do some reflection magic here that detects that this method was called using a variable called 'myVar'
    }
    

    4 回复  |  直到 17 年前
        1
  •  6
  •   Samuel    17 年前

    public void MyTestMethod1()
    {
      string myVar = "Hello World";
      MyTestMethod2(() => myVar);
    }
    
    public void MyMethod2(Expression<Func<string>> func)
    {
      var localVariable = (func.Body as MemberExpression).Member.Name;
      // localVariable == "myVar"
    }
    

        2
  •  4
  •   Lasse V. Karlsen    17 年前

    不幸的是,这将是非常困难的,如果不是不可能的话。

    为什么您需要最初发送的变量的名称?

    MyMethod2(myVar + "! 123");
    

    在本例中,myVar只保存部分值,其余值在运行时在表达式中计算。

        3
  •  1
  •   John Feminella    17 年前

    变量是为实体分配语义的方便标识符。以编程的方式描述它们似乎是一种很大的代码味道。此外,如果知道这一点真的很重要,你就不能传入第二个参数吗?


    编辑: OP更新了他的问题,包括以下内容:

    我知道参数可能并不总是一个变量,但我使用它的地方是在一些验证代码中 我希望开发人员可以显式地声明他们正在验证的值的友好名称 ,如果他们没有,那么它只是从他们调用该方法的var的名称中推断出来。。。

        4
  •  1
  •   Mark Ingram    17 年前

    在我看来,您应该使用枚举作为变量的标识符,而不是试图确定变量的名称。变量的全部意义在于,它只是一个人类可读的名称来表示一点内存。

    你可以做:

    public void MyTestMethod1()
    {
      string myVar = "Hello World";
      MyTestMethod2(myVar, VariableType.MyVar);
    }
    
    public void MyMethod2(string parm, VariableType type)
    {
      if (type == VariableType.MyVar)
      {
      }
    }