Type.GetFields() - 仅返回“public const”字段

时间:2009-08-17 12:51:53

标签: c# .net reflection

我想调用Type.GetFields()并仅返回声明为“public const”的字段。到目前为止我有这个......

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

...但这也包括“公共静态”字段。

3 个答案:

答案 0 :(得分:35)

type.GetFields(BindingFlags.Static | BindingFlags.Public).Where(f => f.IsLiteral);

答案 1 :(得分:20)

尝试检查FieldInfo.Attributes是否包含FieldAttributes.Literal。我没有检查过,但听起来不错......

(我认为你不能在GetFields的一次调用中获得仅常量,但你可以过滤那种返回的结果。)

答案 2 :(得分:0)

从.NET 4.5开始,您可以这样做

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);
    }
}

我检查过,看起来字段中包含所有私有信息。