[英]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.