查找传递给函数的变量名称

让我用下面的例子来解释我的问题:

public string ExampleFunction(string Variable) {
    return something;
}

string WhatIsMyName = "Hello World"';
string Hello = ExampleFunction(WhatIsMyName);

当我将变量“WhatIsMyName”传递给示例函数时,我希望能够获得原始变量名称的字符串。 也许是这样的:

Variable.OriginalName.ToString()

有没有办法做到这一点?


**否**我不这么认为。

您使用的变量名称是为了您的方便和可读性。 如果我没有弄错的话,编译器不需要它,只需将它夹紧即可。

如果有帮助,您可以定义一个名为NamedParameter的新类,其中包含属性Name和Param。 然后您将这个对象作为参数传递。


你想要的是不可能的,但你可以在C#3.0中使用表达式:

public void ExampleFunction(Expression<Func<string, string>> f) {
    Console.WriteLine((f.Body as MemberExpression).Member.Name);
}

ExampleFunction(x => WhatIsMyName);

请注意,这依赖于未指定的行为,虽然它在Microsoft的当前C#和VB编译器以及 Mono的C#编译器中都能正常工作,但并不能保证在未来的版本中这不会停止工作。


我知道这是一个老问题,但在C#6.0中,他们引入了应该解决此问题的运算符的名称。 运算符的名称解析了传递给它的变量的名称。

您的案例的用法如下所示:

public string ExampleFunction(string variableName) {
      //Construct your log statement using c# 6.0 string interpolation
       return $"Error occurred in {variableName}";
}

string WhatIsMyName = "Hello World"';
string Hello = ExampleFunction(nameof(WhatIsMyName));

一个主要的好处是它在编译时完成,

表达的名字是一个常数。 在所有情况下,nameof(...)都会在编译时进行评估以生成一个字符串。 它的参数在运行时不被评估,并被认为是无法访问的代码(但它不会发出“无法访问的代码”警告)。

更多信息可以在这里找到

旧版本的C 3.0及以上版本
建立在Nawfals的答案

GetParameterName2(new { variable });

//Hack to assure compiler warning is generated specifying this method calling conventions
[Obsolete("Note you must use a single parametered AnonymousType When Calling this method")]
public static string GetParameterName<T>(T item) where T : class
{
    if (item == null)
        return string.Empty;

    return typeof(T).GetProperties()[0].Name;
}
链接地址: http://www.djcxy.com/p/69023.html

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

下一篇: How to center a fixed top Navbar in bootstrap 4