이 대답은 보드에있다 그러나 다만 경우에 누군가가 여전히 해답을 찾고 있기 때문에 그것은 꽤되었습니다 ...
나는 비슷한 문제로 실행했습니다. 내 시나리오는 BindingSource.DataSource가 항상 IEnumerable에 바인딩되지만 목록에 항목이 없을 수도 있다는 것입니다. BindingSource에는 "itemType"이라는 private 인스턴스 멤버가 있습니다. 이 필드는 찾고자하는 바를 수행합니다. BindingSource가 목록에 바인딩되어있는 경우 목록의 요소 유형을 표시하거나 목록이없는 경우 BindingSource가 바인딩되는 개체의 유형을 표시합니다.
필드 값에 액세스하려면 좀 해키 반사 사용 : 많은 연구를하고하지 않고
FieldInfo fi =
typeof(BindingSource)
.GetField("itemType", BindingFlags.NonPublic | BindingFlags.Instance);
Type myElementType = fi.GetValue(DataBinder.RestrictedDataBinding) as Type;
을, 나는 가지 무엇인지는 innerList의 요소 유형을 보여주는하고있어, 그것은 아무튼 왜 가정 DataSource가리스트 형인지 아닌지는 중요하지 않습니다. 또한이 필드는 BindingSource (IQueryables 등 포함)에서 지원하는 모든 종류의 목록 요소 유형을 정확하게 표시한다고 가정합니다.
경고 :이 필드를 많이 테스트하지 않았으므로 올바른 요소 유형을 읽지 못하게하는 경우가 있는지 알 수 없습니다. 예를 들어, BindingSource의 DataSource 속성을 다시 설정하면 필드가 항상 정확하게 업데이트됩니까? DataSource 속성이 다른 elementType을 가진 목록으로 재설정되면 어떻게 될까요? 필자의 경우 이러한 예외 사항과 다른 예외 사항은 적용되지 않지만 테스트하려는 경우가 있습니다.
마지막으로 사적 영역을 해킹하기 위해 리플렉션을 사용하면 모든 종류의 끔찍한 원칙이 깨집니다. 그것을 명심하십시오. 또한 itemType 필드가 숨겨진 이유가있을 수 있습니다. 더 자세히 조사해야하는 경우 BindingSource 클래스의 코드를 공개적으로 사용할 수 있습니다.
이 질문을 확인 - http://stackoverflow.com/questions/557340/c-generic-list-t-how-to-get-the-type-of-t –
@Mikael : 그 질문에 ' t 관련이있는 것처럼 보입니다. 이 질문은 내부 *가 아닌 클래스의 * 외부 *를 다루는 것처럼 들립니다. –