Подтвердить что ты не робот

Type.GetFields() - возвращает только поля public const.

Я хочу вызвать Type.GetFields() и возвращать только поля, объявленные как "public const". У меня это до сих пор...

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

... но это также включает в себя "общедоступные статические" поля.

4b9b3361

Ответ 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);
    }
}

Я проверил и похоже, что поля имеют все частные константы.