c# - 使用包含 .Net 中变量名称的字符串访问方法局部变量值

标签 c# .net reflection

我正在尝试获取已在基于包含变量名称的字符串的方法中本地声明的变量的值。我一直在尝试使用反射,如多个 SO threads 中发布的那样。变量的名称存储在表中并以相同的方法访问。

我遇到的问题是查看方法局部变量或方法本身。我可以看到全局变量的值,如下面的代码片段所示,但我在方法中找不到局部变量。换句话说,变量 TestrecordType 被声明为类变量,我可以使用下面的代码在任何方法中访问它。我需要访问代码所在的本地方法中的变量。谁能帮我深入到方法级别?可能吗?

//10.07.2013 DRowe Collecting data for the json class
Corporate_Record clsCorporateRecord = new Corporate_Record();

// get the mapping for the class
ABC.Services.SYS.BmsBoardingEntryLayoutSpecificationCollection colLayoutSpecs = new ABC.Services.SYS.BmsBoardingEntryLayoutSpecificationCollection();
colLayoutSpecs = ABC.Services.SYS.BmsBoardingEntryLayoutSpecification.GetBySubClass("Corporate_Record");
foreach (ABC.Services.SYS.BmsBoardingEntryLayoutSpecification SpecRecord in colLayoutSpecs) {

    // Alter main class level (Global) variable
    TestrecordType = TestrecordType + " Now";

    string myproperty = SpecRecord.FieldName ;
    string myVariable = SpecRecord.MapToCodeVariable;
    string myType = SpecRecord.Type;

    // Can grab Main class variable values but not the local method variable values
    var result = this.GetType().GetField("TestrecordType").GetValue(this);

    clsCorporateRecord.GetType().GetProperty(myproperty).SetValue(clsCorporateRecord, result, null);

    MethodInfo mInfo = typeof(Worker).GetMethod("CreateCorporateRecord01");                         
}                    
myCollection.Corporate_Record.Add(clsCorporateRecord);
//10.07.2013 DRowe END

最佳答案

局部变量不在反射中表示。您可以看到全局变量,因为它们是某种类型的成员。然而,局部变量只是当前堆栈上的槽,并且该堆栈不会向反射 API 公开。

以编程方式暴露调用堆栈的唯一位置是异常的堆栈跟踪中。您可以故意抛出异常,捕获它,然后通过堆栈跟踪进行选择。但这将是一个非常非常糟糕的想法,而且速度非常慢。

关于c# - 使用包含 .Net 中变量名称的字符串访问方法局部变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19254325/

相关文章:

c# - 我想进行检查以确保不会删除我的 C :\and D:\drive on my machine 驱动器

C# 获取大目录的文件名和上次写入时间

c# - 使用空间类型 EF CORE 创建模型

c# - 在 Linq 中不符合条件

使用反射和匹配器的Java方法

reflection - 根据数据类信息自动创建 TableView 列

c# - C++ CLR 在未安装 .net 4.0 时加载 .net 4.0 dll

c# - 阅读文本段落,使用 StreamReader 获取下一行

.net - 在 WCF 中使用声明的类型

java - 获取注释值?