2009-08-17 9 views
26

私はType.GetFields()を呼び出し、唯一の「公共のconst」として宣言されたフィールドを取り戻すしたいだけ戻っ「公共のconst」フィールド。私はこれまでこれを持っています...Type.GetFields() -

type.GetFields(BindingFlags.Static | BindingFlags.Public) 

... "public static"フィールドも含まれています。

答えて

20

FieldInfo.AttributesFieldAttributes.Literalが含まれているかどうかをチェックしよう。私はそれをチェックしていないが、それは右に聞こえる...

(私はあなたがだけGetFieldsへの単一の呼び出しで定数がありますが、結果がそのように返さフィルタリングすることができます得ることができるとは思わない。)

.NET 4.5から始まっ
34
type.GetFields(BindingFlags.Static | BindingFlags.Public).Where(f => f.IsLiteral); 
0

あなたは

public class ConstTest 
{ 
    private const int ConstField = 123; 

    public int GetValueOfConstViaReflection() 
    { 
     var fields = this.GetType().GetRuntimeFields(); 
     return (int)fields.First(f => f.Name == nameof(ConstField)).GetValue(null); 
    } 
} 

は、私がチェックし、フィールドがすべてのプライベートconstsを持っているように見えることを行うことができます。

関連する問題