能否从接收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
相关产品推荐
相关产品推荐

