我想调用Type.GetFields()并仅返回声明为“public const”的字段。到目前为止我有这个......
type.GetFields(BindingFlags.Static | BindingFlags.Public)
...但这也包括“公共静态”字段。
答案 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);
}
}
我检查过,看起来字段中包含所有私有信息。