C# 获取作为参数发送的变量的名称

C# 获取作为参数发送的变量的名称,c#,variables,reflection,lambda,C#,Variables,Reflection,Lambda,我看到了一些关于如何生成一个表达式的示例,该表达式将提取表达式中使用的变量的名称。这很好,但是我需要提取作为函数参数传递的变量的名称,我需要在函数中使用它 从下面的示例中,我需要做一些事情,使Guess函数能够返回“guessMyName”名称 这可能吗 class NameSample { static internal void Test() { string message1 = ""; string message2 = "";

我看到了一些关于如何生成一个表达式的示例,该表达式将提取表达式中使用的变量的名称。这很好,但是我需要提取作为函数参数传递的变量的名称,我需要在函数中使用它

从下面的示例中,我需要做一些事情,使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;
    }
}
类名称示例
{
静态内部空隙试验()
{
字符串message1=“”;
字符串message2=“”;
string guessMyName=“我的值”;
//猜我的名字:我的价值
message1=GetName(()=>guessMyName)+“:”+guessMyName;
//参数:我的值
message2=猜测(猜测我的名字);
}
静态内部字符串猜测(对象参数)
{
返回GetName(()=>参数)+“:”+参数;
}
静态内部字符串GetName(表达式expr)
{
返回(expr.Body作为MemberExpression).Member.Name;
}
}

不,不可能。变量名仅存在于声明它们的方法的作用域中


传递给方法的不是变量本身,而是变量的值,因此无法访问名称。即使在
ref
参数的情况下,传递的是变量的内存位置,而不是它的名称。

不,这是不可能的。变量名仅存在于声明它们的方法的作用域中


传递给方法的不是变量本身,而是变量的值,因此无法访问名称。即使在
ref
参数的情况下,传递的是变量的内存位置,而不是它的名称。

不,您不能这样做。使用变量调用方法时,传递的变量值与建议的副本不一致;这是完全不同的question@ThomasLevesque我们可以重新打开它或使用正确的副本关闭:)@SriramSakthivel,它已经重新打开了。如果你发现了一个真正的复制品,你可以投票关闭;)不,你不能那样做。使用变量调用方法时,传递的变量值与建议的副本不一致;这是完全不同的question@ThomasLevesque我们可以重新打开它或使用正确的副本关闭:)@SriramSakthivel,它已经重新打开了。如果你发现了一个真正的复制品,你可以投票关闭;)