2013-01-12 6 views
1

linq을 사용하여 개체/클래스의 속성 목록을 얻는 방법은 무엇입니까?LINQ 클래스 속성 가져 오기

public class Person { 
public string Name { get; set; } 
public string Age { get; set; } 
public string Gender { get; set; } 
} 

나는 { "이름", "나이", "성별"}을 원합니다.

+0

:

다음은 검색하고 hypthetical "사람"클래스에서 속성 이름을 표시하는 작은 예제 프로그램입니다. - http://msdn.microsoft.com/en-us/library/ms173183(v=vs.80).aspx –

답변

3

을 언급 한 이전의 주석으로, 반사는이 정보를 얻기 위해 사용해야하는 도구입니다. 당신은 반사 생각 될 수

System.Type type = typeof(Person); 
System.Reflection.PropertyInfo[] properties = type.GetProperties(); 

foreach (System.Reflection.PropertyInfo property in properties) 
    Console.WriteLine(property.Name); 
+0

형제 감사합니다! (와이) – lexeRoy

0
typeof(Person).GetProperty("Name") 

리플렉션을 사용하여 개별 속성을 가져올 수 있습니다. 자세한 내용은 here을 참조하십시오.

1

리플렉션을 사용해야합니다. 다음은 많은 프로젝트에서 사용한 기능입니다.

private List<MemberInfo> GetMembers(Type objectType, MemberTypes memberType) 
{ 
    List<MemberInfo> members = new List<MemberInfo>(); 

    Assembly asm = Assembly.GetAssembly(objectType); 
    foreach (Type t in asm.GetExportedTypes().Where((Type testType) => object.ReferenceEquals(testType, objectType))) { 
     foreach (MemberInfo mi in t.GetMembers().Where((MemberInfo member) => member.MemberType == memberType)) { 
      switch (memberType) { 
       case MemberTypes.Property: 
        members.Add(mi); 
        break; 
       case MemberTypes.Method: 
        bool isValid = true; 

        foreach (PropertyInfo pi in t.GetProperties()) { 
         if ((pi.CanWrite && pi.GetSetMethod().Name == mi.Name) || (pi.CanRead && pi.GetGetMethod().Name == mi.Name)) { 
          isValid = false; 
          break; 
         } 
        } 


        if (isValid) 
         members.Add(mi); 
        break; 
      } 
     } 
    } 

    return members.OrderBy((MemberInfo mi) => mi.Name).ToList(); 
} 

를 호출하려면, 당신은 예를 들어, 사용할 수 있습니다

var properties = GetMembers(typeof(myObject), MemberTypes.Property) 
+0

MemberTypes.Property 란 무엇입니까? 내가 어디에서 가질 수 있니? 미리 감사드립니다 .. – lexeRoy

+0

'MemberTypes' 열거 형은'System.Reflection' 네임 스페이스에서 사용할 수 있습니다. 그것을 사용하려면'Imports System.Reflection'을 코드의 시작에서'Class' 선언 앞에 추가하십시오. – xfx