我有两种方法,其中一个参数从第一个到第二个被引用。
public double myFirstDouble = 1;
public double mySecondDouble = 2;
public double Calculate()
{
// do stuff
GetString(ref myFirstDouble);
GetString(ref mySecondDouble);
// ret something;
}
我希望返回调用站点中的参数名称。例如,在下面的方法中,应返回
myFirstDouble
或 mySecondDouble
,而不是 myParameter
。
public string GetString(ref double myParameter)
{
return nameof(myParameter);
// return myParameter.ToString();
}
如果您运行的是更高版本的 C#(我认为是 C#10+),您可以使用
CallerArgumentExpression
属性来注释参数。
using System.Runtime.CompilerServices;
public string GetString(ref double myparameter,
[CallerArgumentExpression(nameof(myparameter))] string myparameterExpression = "")
{
return myparameterExpression + myparameter.ToString();
}
有一些解决方法,但直接的答案是不,这是不可能的。
一个例子:
public double Calculate()
{
GetString(ref myFirstDouble, nameof(myFirstDouble));
GetString(ref mySecondDouble, nameof(mySecondDouble));
return something;
}
public string GetString(ref double myparameter, string variableName)
{
return variableName + ": " + myparameter.ToString();
}
ref
关键字允许方法对原始变量进行操作,但编译器不会将变量的名称作为函数调用的一部分传递。
相反,仅传递对变量的引用。 在运行时,没有元数据将引用链接回调用者作用域中的变量名称。