2012-05-25 2 views
2

이렇게 할 수있는 방법이 있습니까?메서드 매개 변수에서 제네릭 형식 매개 변수 설정

void SomeMethod(Type generic) 
{ 
    SomeGenericMethod<generic>(); 
} 

제네릭 형식 매개 변수가 아닌 "일반"매개 변수로 형식을 전달해야합니다.

+0

대부분의 작업을 수행하기 위해 리플렉션을 사용할 수 있지만 수행하려는 작업이 완전히 명확하지는 않습니다. 더 많은 관련 코드를 게시 할 수 있습니까? –

+0

FWIW, 타입을 typeof (T)로 전달할 수 있기 때문에 둘 다 노출하는 대부분의 API는 일반 호출로 비 일반형 호출을 갖습니다. 그게 당신이 속한 시나리오인지는 모르겠지만 그럴 경우를 대비해. :) –

답변

4

당신은 반사와 함께 할 수 있습니다

public class foo 
{ 
    public void SomeMethod(Type type) 
    { 
     var methodInfo = this.GetType().GetMethod("SomeGenericMethod"); 
     var method = methodInfo.MakeGenericMethod(new[] { type }); 
     method.Invoke(this, null); 
    } 

    public void SomeGenericMethod<T>() 
    { 
     Debug.WriteLine(typeof(T).FullName); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var foo = new foo(); 
     foo.SomeMethod(typeof(string)); 
     foo.SomeMethod(typeof(foo)); 
    } 
} 

이 방법으로 반사 다른보고 할 수 있도록, 처음에 제네릭을 사용할 때의 몇 가지 이점을 상실하는 것을 의미하여, 말했다 디자인 대안.()

var MyObject = new MyClass(); 
typeof(MyClass).GetMethod("SomeGenericMethod").MakeGenericMethod(generic).Invoke(myObject, null); 

Type.GetMethod을가 켜져라고 유형에 정의 된 방법을 설명하는 개체를 가져옵니다 당신의 방법은 MyClass에라는 클래스에 정의되어 있다고 가정

1

이 그것을해야한다. 이 메서드는 일반적이므로 MakeGenericMethod를 호출하고 해당 일반 매개 변수 하나를 전달해야합니다.

그런 다음 메서드를 호출하고 메서드를 호출 할 개체와 해당 인수를 전달합니다. 인수가 없으므로 null을 전달합니다.

관련 문제