山西念星科贸有限公司 2024-06-01 10:45 采纳率: 72%
浏览 3
已结题

c#如何在方法体中知道全局变量的变量名

c#如何在方法体中知道全局变量的变量名

 private void A(object objectName)
 {
    //如何在这个方法体中知道objectName(这个已知是全局变量)的变量名
 }

  • 写回答

3条回答 默认 最新

  • 关注

    上午好☀️☀️☀️️
    本答案参考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}");
    }
    

    请注意,这种方法仅适用于静态全局变量,并且假设变量名与传递给方法的对象名称相匹配。在实际项目中,更好的做法是使用参数、属性或者传递一个包含变量值的对象,而不是尝试动态查找变量名。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月29日
  • 已采纳回答 7月28日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。