我看到了几个关于如何创建一个表达式来提取表达式中使用的变量的名称的示例。这很好,但是我需要提取作为函数参数传递的变量的名称,并且我需要在函数中使用它。
从下面的例子中,我需要做一些东西,使Guess函数返回"guessMyName"的名称。
这可能吗?
class NameSample
{
static internal void Test()
{
string message1 = "";
string message2 = "";
string guessMyName = "my value";
// guessMyName: my value
message1 = GetName(() => guessMyName) + ": " + guessMyName;
// parameter: my value
message2 = Guess(guessMyName);
}
static internal string Guess(object parameter)
{
return GetName(() => parameter) + ": " + parameter;
}
static internal string GetName<T>(Expression<Func<T>> expr)
{
return (expr.Body as MemberExpression).Member.Name;
}
}
不,不可能。变量名只存在于声明它们的方法的作用域中。
传递给方法的不是变量本身,而是变量的值,因此不能访问其名称。即使在ref
参数的情况下,传递的是变量的内存位置,而不是它的名称。