2014-07-15 2 views
0

나는 내 클래스 Car에서 상수에 대한 정보를 얻으려고하지만, 불행하게도 나는 단지 4 field (name, currentSpeed, maxSpeed, state) 만 얻는다. 필드 const를 어떻게 얻을 수 있습니까?Constant in MemberInfo

감사합니다.

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

답변

1

이 당신에게 제공한다 상수, 조회에서 BindingFlags.Instance은 정적을 제거되었으며, 상수 static이다.

type.GetFields(BindingFlags.Static | 
       BindingFlags.FlattenHierarchy) 
    .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList(); 
+0

확인. 나는 썼다 : MemberInfo [] members = type.GetMembers (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); 아무 것도 발생하지 않았습니다. MemberInfo를 사용하고 상수를 얻을 수 있습니까? 감사합니다. – Makeda

+0

아니요. 왜냐하면'FieldInfo : MemberInfo'는 구현시'MemberInfo'를 사용하고 싶을 때 이것을 할 수 있기 때문입니다. (FieldType으로 fi) .IsLiteral &&! (FieldType으로 FieldInfo로). var res = typeof (Car) .GetMembers (BindingFlags.Static | BindingFlags.FlattenHierarchy) .Where (o => o.MemberType == MemberTypes.Field) fi로 FieldInfo) .IsInitOnly) .ToList();' –