0

I try to get information about constant in my class Car, but unfortunately in result I get only 4 field (name, currentSpeed, maxSpeed, state). How can I get field const.

Thanks.

public abstract class Car
{
    protected string name;
    protected short currentSpeed;
    protected short maxSpeed;
    protected EngineState state;

    protected const int const = 1;
 }

........................................................

 Type type = assembly.GetType("CarLibrary.Car"); 

 MemberInfo[] members = type.GetMembers(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

 foreach (MemberInfo element in members)
 Console.WriteLine("{0,-15}:  {1}", element.MemberType, element);
Makeda
  • 47
  • 4

1 Answers1

1

This should give you constants, in your query BindingFlags.Instance was eliminating statics, and constants are static.

type.GetFields(BindingFlags.Static |
               BindingFlags.FlattenHierarchy)
    .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
Matas Vaitkevicius
  • 58,075
  • 31
  • 238
  • 265
  • Ok. I wrote: MemberInfo[] members = type.GetMembers(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); Nothing has happened. Can I use MemberInfo and get a constant? Thanks. – Makeda Jul 15 '14 at 12:40
  • nope it's because `FieldInfo : MemberInfo` you could do this if you badly want to use `MemberInfo` in your implementation. `var res = typeof(Car).GetMembers(BindingFlags.Static | BindingFlags.FlattenHierarchy).Where(o => o.MemberType == MemberTypes.Field).Where(fi => (fi as FieldInfo).IsLiteral && !(fi as FieldInfo).IsInitOnly).ToList();` – Matas Vaitkevicius Jul 15 '14 at 13:04