이렇게 할 수있는 방법이 있습니까?메서드 매개 변수에서 제네릭 형식 매개 변수 설정
void SomeMethod(Type generic)
{
SomeGenericMethod<generic>();
}
제네릭 형식 매개 변수가 아닌 "일반"매개 변수로 형식을 전달해야합니다.
이렇게 할 수있는 방법이 있습니까?메서드 매개 변수에서 제네릭 형식 매개 변수 설정
void SomeMethod(Type generic)
{
SomeGenericMethod<generic>();
}
제네릭 형식 매개 변수가 아닌 "일반"매개 변수로 형식을 전달해야합니다.
당신은 반사와 함께 할 수 있습니다
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에라는 클래스에 정의되어 있다고 가정
이 그것을해야한다. 이 메서드는 일반적이므로 MakeGenericMethod를 호출하고 해당 일반 매개 변수 하나를 전달해야합니다.
그런 다음 메서드를 호출하고 메서드를 호출 할 개체와 해당 인수를 전달합니다. 인수가 없으므로 null을 전달합니다.
대부분의 작업을 수행하기 위해 리플렉션을 사용할 수 있지만 수행하려는 작업이 완전히 명확하지는 않습니다. 더 많은 관련 코드를 게시 할 수 있습니까? –
FWIW, 타입을 typeof (T)로 전달할 수 있기 때문에 둘 다 노출하는 대부분의 API는 일반 호출로 비 일반형 호출을 갖습니다. 그게 당신이 속한 시나리오인지는 모르겠지만 그럴 경우를 대비해. :) –