Type.GetFields() - возвращает только поля public const.
Я хочу вызвать Type.GetFields() и возвращать только поля, объявленные как "public const". У меня это до сих пор...
type.GetFields(BindingFlags.Static | BindingFlags.Public)
... но это также включает в себя "общедоступные статические" поля.
Ответы
Ответ 1
Попытка проверить, FieldInfo.Attributes
включает FieldAttributes.Literal
. Я не проверял его, но звучит правильно...
(Я не думаю, что вы можете получить только константы в одном вызове GetFields
, но вы можете фильтровать результаты, возвращенные таким образом.)
Ответ 2
type.GetFields(BindingFlags.Static | BindingFlags.Public).Where(f => f.IsLiteral);
Ответ 3
Начиная с .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);
}
}
Я проверил и похоже, что поля имеют все частные константы.