c#如何在方法体中知道全局变量的变量名
private void A(object objectName)
{
//如何在这个方法体中知道objectName(这个已知是全局变量)的变量名
}
c#如何在方法体中知道全局变量的变量名
private void A(object objectName)
{
//如何在这个方法体中知道objectName(这个已知是全局变量)的变量名
}
上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
在C#中,由于访问修饰符和作用域的限制,你不能直接在方法体中获取全局变量的名称。全局变量是在方法体外部声明的,它们的作用域通常是整个程序或类。但是,如果你需要在方法内部引用全局变量,你可以使用System.Diagnostics.StackTrace
类来获取调用堆栈的信息,然后通过反射找到变量。
以下是一个不推荐的示例,因为它依赖于特定的命名约定,并且可能在复杂项目中不可靠:
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
private void A(object objectName)
{
var stackTrace = new StackTrace();
var callingMethod = stackTrace.GetFrame(1).GetMethod(); // 获取调用当前方法的方法
var declaringType = callingMethod.DeclaringType; // 获取方法所在的类型
// 假设全局变量是静态成员
var globalVariables = declaringType.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
var variableName = globalVariables.FirstOrDefault(field => field.GetValue(null) == objectName)?.Name;
Console.WriteLine($"Global variable name: {variableName}");
}
请注意,这种方法仅适用于静态全局变量,并且假设变量名与传递给方法的对象名称相匹配。在实际项目中,更好的做法是使用参数、属性或者传递一个包含变量值的对象,而不是尝试动态查找变量名。