[英]Setting a generic type parameter from a method parameter
有什么辦法可以做這樣的事情嗎?
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));
}
}
就是說,以這種方式使用反射意味着您一開始就失去了使用泛型的某些好處,因此您可能想看看其他設計替代方案。
假設您的方法是在名為MyClass的類中定義的,則應這樣做:
var MyObject = new MyClass();
typeof(MyClass).GetMethod("SomeGenericMethod").MakeGenericMethod(generic).Invoke(myObject, null);
Type.GetMethod()獲取一個對象,該對象描述了在其調用的Type中定義的方法。 該方法是通用的,因此我們需要調用MakeGenericMethod,並傳遞其一個通用參數。
然后,我們調用該方法,傳遞要調用該方法的對象以及它需要的所有參數。 由於不帶參數,因此我們只傳遞null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.