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

标签 c# variables reflection lambda

<分区>

我看到了几个关于如何创建一个表达式来提取表达式中使用的变量名称的示例。这很好,但我需要提取作为函数参数传递的变量的名称,我需要在函数内部使用它。

在下面的示例中,我需要制作一些东西,使 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 参数的情况下,传递的是变量的内存位置,没有变量的名称。

关于c# - 获取作为参数发送的变量的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23639950/

相关文章:

c# - 任务同步的正确方法?

javascript - 为什么用 'this' 填充的 JavaScript var 会随着 'this' 的变化而变化?

.net - 如何将 GetMethod 用于静态扩展方法

java - 将 String 转换为任何所需类的通用代码

c# - 如何将通用字典转换为其已知类型?

c# - 如何使用路径创建新文件?

c# - 分析 word 文档中的文本 - 如何让它忽略书签?

javascript - 动态创建按钮的 onclick 函数中的变量

variables - Lisp 中的 setq 和 defvar

c# - 存储 html 的最佳数据类型