You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从接收ref参数的方法中获取调用处的变量名称?

获取ref参数调用时的实参名称

你当前的代码中,nameof(myParameter)只能返回方法形参的名称。要获取调用时传入的实参名称(比如myFirstDouble或mySecondDouble),可以使用C# 10.0及以上提供的[CallerArgumentExpression]特性,步骤如下:

1. 引入必要的命名空间

需要添加System.Runtime.CompilerServices命名空间,调用方信息特性定义在此处。

2. 修改GetString方法

给方法添加一个带有[CallerArgumentExpression]属性的参数,指定关联的ref参数名,编译器会自动填充调用时的实参表达式文本:

using System.Runtime.CompilerServices;

public double myFirstDouble = 1;
public double mySecondDouble = 2;

public double Calculate()
{
    // do stuff
    string firstParamName = GetString(ref myFirstDouble);
    string secondParamName = GetString(ref mySecondDouble);
    // firstParamName 会是 "myFirstDouble",secondParamName 会是 "mySecondDouble"
    
    // ret something;
    return 0; // 示例返回值
}

public string GetString(ref double myParameter, [CallerArgumentExpression("myParameter")] string paramName = "")
{
    return paramName;
}

说明

  • [CallerArgumentExpression("myParameter")]:该特性会让编译器自动把调用GetString时传给myParameter的参数表达式(即变量名)赋值给paramName,无需调用方手动传递。
  • 版本要求:此特性仅支持C# 10.0+、.NET 6+,若项目使用更早版本,可通过表达式树实现,但复杂度较高,优先推荐上述方案。

内容的提问来源于stack exchange,提问作者desiredness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:54:55