2011-08-15 6 views
0

만약 내가 List<int>을 가지고있는 경우, 내가 가지고있는 Type이 일반 '컨테이너'인지 확인해야합니다. 목록으로 작업하고 있는지 확인해야합니다. 내가 int으로 일하는지 여부를 확인하려면 어떻게해야합니까? (나는 리플렉션을 생각하고있다.) 또 다른 예로, StructContainer<T>이라는 클래스가 있는데, 'StructContainer'라는 단어를 찾을 필요가 있습니다. 'T'가 무엇인지 궁금해하지 않습니다. 반사도를 사용하여 StructContainer'1을 얻으면 일부 문자열을 처리해야합니다. 분할 등/편집 : 그냥 더 설명하기 위해, StructContainer<int> 내가 필요 'StructContainer', Tuple<int> 내가 '튜플'을 필요 List<int> 내가 '목록'을 필요로 등 첫 번째 질문은 여러 가지 방법으로 달성 할 수일반 컨테이너 유형 가져 오기

답변

0
string type = yourObject.GetType().Name.Split('`')[0]; 
+0

나는 이것을 할 필요가 없길 희망하지만, 나의 유일한 선택처럼 보이기 시작하고있다 ... –

4

:

  1. 개체가 IEnumerable<T> : yourObject is IEnumerable<int>을 구현하는지 확인하십시오. 이것은 컨테이너에있는 객체의 유형을 알고있는 경우에만 작동합니다 (이 경우)
  2. 아래에서 설명한 동일한 해결책을 사용하여 StructContainerList으로 변경하십시오.

두 번째 질문에 관해서는, 당신은이 작업을 수행 할 수 있습니다 : 그것은 내가이 될 수 의심 무엇인지를 알려줍니다

var yourObject = new StructContainer<int>(); 
var yourType = yourObject.GetType(); 
if(yourType.IsGenericType && 
    yourType.GetGenericTypeDefinition() == typeof(StructContainer<>)) 
    // ... 
+0

합니다. 어쩌면 내 첫 번째 질문은 그 문제를 혼란스럽게 만들었을 것이다. Type.Name과 비슷한 어떤 단서도 가지지 않고 포함하는 타입의 이름을 알아야한다. –

+0

@Adriaan :'List '객체를 가지고 있다면, 결과로'int'를 얻으시겠습니까? –

+0

아니요,'List '는'List'를 제공해야합니다. 'StructContainer '는'StructContainer'를 제공해야합니다. –

관련 문제