2

変数名を含む文字列に基づいて、メソッドでローカルに宣言された変数の値を取得しようとしています。複数のSO スレッドに投稿されているように、リフレクションを使用しようとしています。変数の名前はテーブルに格納され、同じメソッドでアクセスされます。

私が抱えている問題は、メソッドのローカル変数またはメソッド自体を見ることです。以下のコード スニペットに示されているように、グローバル変数の値を確認できますが、メソッドでローカル変数を見つけることができません。つまり、変数 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
4

1 に答える 1

5

ローカル変数はリフレクションで表現されていません。グローバルは型のメンバーであるため、グローバルを表示できます。ただし、ローカルは現在のスタックの単なるスロットであり、そのスタックはリフレクション API に公開されていません。

コール スタックがプログラムによって公開される唯一の場所は、例外のスタック トレースです。意図的に例外をスローし、それをキャッチして、スタック トレースから選択することができます。しかし、それは悪い、悪い、アイデアであり、非常に遅いでしょう。

于 2013-10-08T17:29:15.370 に答える