문제

2011-05-10 5 views
2

가능한 중복 :
How to iterate the List in Reflection
Problem with IEnumerable in Reflection문제

안녕, 반사의 목록이 반복되는 동안이 문제에 직면하고있다

.

var item = property.GetValue(obj,null); // We dont know the type of obj as it is in Reflection. 

foreach(var value in (item as IEnumerable)) 
{ 
    //Do stuff 
    } 

내가 이렇게하면 내가 제네릭 형식 'System.Collections.Generic.IEnumerable'를 사용

같은 오류가 하나 개의 형태 인수

제발 도와주세요을 요구 받게됩니다.

+0

당신은 IEnumerable '에 캐스트 할 필요가 없습니다. IEnumerable – Stecya

답변

9

유형 IEnumerable과 제네릭 유형 IEnumerable<T> 사이에는 차이점이 있습니다. 현재 그것은 당신이 네임 스페이스 System.Collections.Generic을 포함 시켰기 때문에 일반적인 것을 의미한다고 생각합니다; IEnumerable<T> 제네릭 형식을 올바르게 작성하지 않았기 때문에 오류 메시지가 표시됩니다.

IEnumerable 유형이 System.Collections 네임 스페이스에 선언되어 있으므로 이에 대한 참조를 추가하십시오. (using System.Collections;).

generic 형식을 사용하려는 경우 foreach(var value in (item as IEnumerable<string>))과 같은 형식이어야합니다. 여기서 string은 개체 유형 item이 열거되는 형식입니다.

IEnumerableIEnumerable<T>뿐만 아니라 이미이 질문을 코멘트에 명시된 바와 같이이 information about generic types.

+0

은 내 자신의 답변을 게시했지만 귀하의 것이 더 완전합니다. +1 –

0

를 참조하십시오. 이 인스턴스는 약간 다른 문제가 있습니다. 소스 파일에 System.Collections.Generic 네임 스페이스를 포함하기 때문에 컴파일러 오류가 발생합니다 (맨 위 절 사용). 해당 네임 스페이스에는 IEnumerable 제네릭 버전 ->IEnumerable<T>이 포함되어 있습니다. 그 때문에 캐스팅이 실패합니다. IEnumerable을 사용하려면 "using System.Collections"을 추가하십시오.