繁体   English   中英

可以从 C# 中的定义函数内部访问变量名称吗?

[英]Can one access variable name from inside its defining function in C#?

如果我有一个变量,我可以在 C# 中如下打印其声明的名称:

String myVar = "This is a string.";
Console.WriteLine($"This variable is named {(((MemberExpression)((Expression<Func<string>>)(()=>T)).Body).Member.Name)}.");

这将打印This variable is named myVar.

但是,我需要在其定义函数的范围内使用它,即

String myVar = f(args);
public String f(args) {
    String name = ...
    //here goes any code necessary to make name = "myVar"
}

我需要在f里面放什么代码来恢复变量名? 这可能吗? 我想这比上一个要复杂一些。

这可能吗?

不。首先,方法返回的值根本不需要分配给变量。 其次,即使是赋值给一个变量,也不是所有的变量都有名字。 因此,无法知道函数调用的值将分配给的变量的名称。

最佳实践是始终设计函数,以便它们独立于调用者的细节计算值。

(这有可能得到从被叫方的主叫方的源代码的位置,但该特征应限于调试和诊断目的。)

这听起来很像一个“XY”问题。 也就是说,你有一些真正的问题,你想出了一个错误的解决方案,现在你正在问一个关于错误解决方案的问题。 你试图解决的真正问题是什么?

nameof存在,让我们改用它。

String myVar = "This is a string.";
Console.WriteLine($"This variable is named {nameof(myVar)}.");

所以你的下一点,我们必须做出一些改变。 我假设因为您正在传递args ,所以在您的Main方法中调用了它。 我们需要让myVar成为一个类级别的变量。

static String myVar;

static void Main(string[] args)
{
      myVar = f(args);
}

public static String f(string[] args) {
    String name = nameof(myVar);
    // Whatever else you're doing
}

这有点hacky,并且依赖于您只将此函数的结果分配给存在于函数外部的特定变量,这肯定违反了OOP原则并且是明确的反模式。 有了有关您的用例的更多信息,我们可能会指导您找到更好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM