リフレクションを介してパブリック静的フィールドの値を取得します


85

これは私がこれまでに行ったことです:

 var fields = typeof (Settings.Lookup).GetFields();
 Console.WriteLine(fields[0].GetValue(Settings.Lookup)); 
         // Compile error, Class Name is not valid at this point

そしてこれは私の静的クラスです:

public static class Settings
{
   public static class Lookup
   {
      public static string F1 ="abc";
   }
}

10
props代わりに変数を呼び出すと、fields将来の開発者を混乱させる可能性があることに注意してください。プロパティはそれ自体のものであり、フィールドは間違いなくそうではありません。
ErikE 2015

回答:




7

の署名FieldInfo.GetValue

public abstract Object GetValue(
    Object obj
)

obj値を取得するオブジェクトインスタンスはどこですかnull、それが静的クラスの場合はどこですか。したがって、これは次のことを行う必要があります。

var props = typeof (Settings.Lookup).GetFields();
Console.WriteLine(props[0].GetValue(null)); 

1
変数名を信頼しないでください... OPはGetPropertiesではなくGetFieldsを呼び出しています;)
Thomas Levesque

@PauliØsterø2番目は何にnull対応しますか?FieldInfo.GetValue単一のパラメーターを受け入れるだけではありませんか?私はGetValue何かの過負荷を見つけることができないようです
ThomasFlinkow19年

@ThomasFlinkow単なるタイプミス、その今固定
パウリØsterø

@PauliØsterøはそう思った:)質問のコードがコピーアンドペーストの準備ができていることを確認したかっただけです。だから良い答えのために+1。
ThomasFlinkow19年

4

これを試して

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.