2011-12-07 2 views
0

나는이 목록 가지고 :목록이 있습니까 <T> T 속성이 들어 있습니까?

private static List<Type> _AbstractTypes = new List<Type>(); 

을 나중에 내 프로젝트에서 나는 Type.FullName에 해당하는 string을 얻었다.

_AbstractTypes.FullName.Contains(myString) 

나는 절대적으로 알고 : 것은 내 문자열이 내 목록에 포함되어 있지만이 가능한 루프 :(임 같은 뭔가를 찾고 을 피하기 위해 관리하지 않는 경우 내가 확인하고 싶은 것입니다 내 이전 코드는 전혀 컴파일 할 수 없다는 것을 알았지 만, 그것은 내가 찾는 일종의 것이다! 어떤 도움을 미리 주셔서 감사한다

+0

당신은하지 않습니다 루프를 사용하고 싶습니까? 루프를 구현하는 데 도움이 필요하십니까? foreach 루프를 사용하면 원하는 결과를 얻을 수 있다고 생각하기 때문입니다. – stackr

답변

6

Linq를 사용할 수있다. 그러나 우리는 루프가없는 구조에 대해서만 이야기한다. 후드가 루프를해야합니다. 더 잘하고 싶다면 HashSet<T>을 사용할 수 있습니다.

의 LINQ 코드는 다음과 같을 수 있습니다 :

_AbstractTypes.Any(t => t.FullName == myString); 

HashSet<Type> 코드는 다음과 같이 수 : 목록 요소를 포함

var types = new HashSet<Type>(); 
types.Add(typeof(int)); //Fill it with types 
types.Add(typeof(double)); 

//Check by getting types from their string name, you could of course also cache those types 
Console.WriteLine("Contains int: " + types.Contains(Type.GetType(intName))); //True 
Console.WriteLine("Contains float: " + types.Contains(Type.GetType(floatName))); //False 
+0

+1에 대한 HashSet

+0

_AbstractTypes.Any (t => t.FullName == myString); 완벽하다 :) "no loop"로 나는 낡은 학교보고 코드로 뭔가를 의미하지 않았다. 그리고 당신의 대답은 내가 찾고있는 것이다;) thx! –

+0

@GuillaumeSlashy Linq는 현대적이면서도 멋지다. 그래서 오래된 학교를 보지 않는 트릭을해야한다 :-) –

0

경우 _AbstractTypes.First().GetType()처럼 뭔가를 할 수 있습니다.

1

이 코드 :

bool result = _AbstractTypes.Any(t=>t.FullName == myString); 

이 작업을 수행해야합니다.

조건이 충족되거나 (true가 반환 될 때까지) 또는 none이 반환 될 때까지 모든 형식에 대해 조건자를 테스트합니다.

_AbstractTypes.Any(t=>t.FullName.Contains(myString)) 
0

당신은 아마 이런 식으로 뭔가를 할 수 있습니다.

당신은 (뒤에서 루핑으로) 수행 할 수 있습니다 유형이 목록에 포함되는 경우

bool check = _AbstractTypes.Any(item => item.FullName == myString); 
0

당신은 반복 피할 수

0

난 당신이 찾을 수 있다고 생각하는 방법 : 그래서

if (_AbstractTypes.Contains(typeof(string))) 
{ 
    // Do Something 
} 
관련 문제