C# リフレクション - 単純なクラスからフィールド値を取得する 質問する

C# リフレクション - 単純なクラスからフィールド値を取得する 質問する

私のクラスは次のとおりです:

class A {
    public string a = "A-val" , b = "B-val";
}

オブジェクトのメンバーを印刷したい反射によって

//Object here is necessary.
Object data = new A();
FieldInfo[] fields = data.GetType().GetFields();
String str = "";
foreach(FieldInfo f in fields){
    str += f.Name + " = " + f.GetValue(data) + "\r\n";
}

望ましい結果は次のとおりです。

a = A-val
b = B-val

残念ながら、これは機能しませんでした。助けてください、ありがとうございます。

ベストアンサー1

エラー(セミコロンが欠けている、変数名が間違っている)を修正したら、投稿したコードはする動作 - 試してみたところ、名前と値が問題なく表示されました。

私の推測では、実際には、公開されていないフィールドを使用しようとしているのだと思います。このコード:

FieldInfo[] fields = data.GetType().GetFields();

...のみ取得します公共フィールド。通常は、非公開フィールドも必要であることを指定する必要があります。

FieldInfo[] fields = data.GetType().GetFields(BindingFlags.Public | 
                                              BindingFlags.NonPublic | 
                                              BindingFlags.Instance);

(そうならないことを祈ります本当に結局のところ、パブリックフィールドがあります...)

おすすめ記事