2010-01-20 5 views
15

DataAccessLayer에 다음과 같은 FindAll 메서드가 있습니다.타입 객체를 일반적인 메소드에 전달할 수 있습니까?

public FindResult<T> FindAll<T>() where T : Entity, new() 

및 클라이언트 코드에서 다음과 같이 FindAll 메서드를 반복적으로 호출하는 데 사용해야하는 Type [] 배열이 있습니다.

foreach (var type in typeArray) 
{  
    var result = DataAccessLayer.FindAll<type>(); 
    ... 

그러나 컴파일러는 "유형 또는 예상 이름 공간"에 대해 불만을 표시합니다.이 문제를 해결할 수있는 쉬운 방법이 있습니까? 나는 type.GetType() 또는 typeof (type)을 시도했지만 어느 것도 작동하지 않았습니다.

미리 감사드립니다!

답변

13

이 같은이, 뭔가를 반사를 사용해야 할 수도 있습니다 :

DataAccessLayer.GetType().GetMethod("FindAll<>").MakeGenericMethod(type).Invoke() 

This blog post는 당신이 필요로하는 정보를 포함 할 수 있습니다.

+0

는 C#을 (나는 그것이 C# 4.0에서 지원 들었어요) 내 원래의 코드가 작동하지 않았다 동적 입력을 지원하지 않기 때문에인가? – theburningmonk

+1

C# 4의 동적 지원은 당신이 중 하나가 동적 제네릭 형식을 제공 할 수있는 방법을 알고하지 않기 때문에 당신이 다른 방법으로이 작업을 수행 할 수 있도록한다면 잘 모르겠어요. 하지만 – Lucero

3

제네릭을 사용하여 유형은 컴파일 타임에 resolveable 할 필요가있다. 런타임에 유형을 제공하려고합니다.

+0

그래, 나는 C#을 너무 동적 입력에 대한 지원을 소개 할 예정이다 지금, 나는이 순간에 지원되지 않는 동적 입력을 사용하려고하지만 닷넷 4.0에 읽고 있던 것을 깨달았다 ... 그것을 시도하지 않은 가까운 미래에 내가하려고 한 일이 가능할 수도 있습니다! – theburningmonk

관련 문제