2012-11-21 2 views
0

형식 T (문자열) 및 IList의 속성 목록을 받고 HTML 표로 렌더링하는 사용자 지정 컨트롤을 구현하고 있습니다. 마크 업과 CreateChildControls 부분이 있습니다.IList에서 알 수없는 형식의 액세스 속성 <T>

내가하고 싶은 것은 리플렉션을 통해 속성을 살펴보고 List에서 실행되는 foreach 루프 내의 속성 값을 가져 오는 것입니다.

나는 T는 컴파일시에 무엇을 모르는, 내가 이렇게하는 가장 좋은 방법이 될 것입니다 무엇 어떤 T.

에 대한 목록을 수용 할 수 있도록하려면?

편집 :

_properties = new List<string>() 
     { 
      "FirstName", 
      "LastName" 
     }; 

그리고 형의 사람의 개체의 목록을 전달 :

public class CustomControl : System.Web.UI.WebControls.WebControl, INamingContainer 
{ 
    private List<string> _properties; 
    private **?????????** _dataSource; 

    public List<string> Properties 
    { set { _properties = value; } } 

    public **?????????** DataSource 
    { set { _dataSource = value; } } 
} 

가 지금은 이런 일에 속성의 값을 설정 말할 수

public class Person 
{ 
    public string FirstName 
    { get; set; } 
    public string LastName 
    { get; set; } 
} 

사람 캘als는 단지 장소 소유자입니다. 목록에있는 모든 T에 대해이 작업을 수행하려고합니다. 호출 클래스는 T 유형을 알고 있으며 사용자 정의 컨트롤은 그렇지 않습니다. 또한 사용자 지정 컨트롤 자체는 일반 클래스로 계획되지 않습니다. 희망 사항은 내 질문에 집중하는 데 도움이됩니다.

+0

글쎄, 무엇을 시도 했습니까? (힌트 :'typeof (T) .GetProperty (...)'는 귀하의 친구입니다 ...) –

+0

@JonSkeet - List 의 속성은 어떤 유형이어야합니까? IList? 그것을 캐스팅해야합니까? 그렇다면 무엇에? –

+0

나는 잘 모른다 - 우리는 문맥에 대해 충분히 모른다. (일반적인 메서드, 예를 들어, 일반적인 형식 일 수 있습니까? 호출자가 형식을 알고 있습니까? 아니면 동적이어야합니까?) –

답변

1

데이터 소스를 일반 IEnumerable으로 정의한 다음 리플렉션을 통해 각 유형의 값을 가져올 수 있습니다. 예 :

private IEnumerable _dataSource; 

foreach (object o in _dataSource) 
{ 
    foreach (string propName in _properties) 
    { 
     PropertyInfo prop = o.GetType().GetProperty(propName); 

     // ... 
    } 
} 
관련 문제