是否可以从作为 ref 参数的方法中获取变量的名称?

问题描述 投票:0回答:2

我有两种方法,其中一个参数从第一个到第二个被引用。

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# reflection properties
2个回答
1
投票

如果您运行的是更高版本的 C#(我认为是 C#10+),您可以使用

CallerArgumentExpression
属性来注释参数。

using System.Runtime.CompilerServices;

public string GetString(ref double myparameter,
[CallerArgumentExpression(nameof(myparameter))] string myparameterExpression = "") 
{
    return myparameterExpression + myparameter.ToString();
}

0
投票

有一些解决方法,但直接的答案是不,这是不可能的

一个例子:

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
关键字允许方法对原始变量进行操作,但编译器不会将变量的名称作为函数调用的一部分传递。

相反,仅传递对变量的引用。 在运行时,没有元数据将引用链接回调用者作用域中的变量名称。

© www.soinside.com 2019 - 2024. All rights reserved.