[英]Pass type to generic method determined by Type object
我有一個我想要調用的對象的泛型方法。 但是在那一刻我不知道T,我所知道的是T的類型,它被設置為對象的屬性。
public calass SomeClass{
public Type SomeType { get; set; }
public void SomeMethod<T>(){
}
}
...
var instance = new SomeClass();
...
可以這樣做嗎?
instance.SomeMethod<SomeType>();
是的,您可以使用Reflection:
調用它Reflection:
var method = instance.GetType().GetMethod("SomeMethod")
.MakeGenericMethod(instance.SomeType);
method.Invoke(instance);
另請注意, SomeType
是屬性的名稱,而不是屬性的類型。當您要調用泛型方法時,需要指定類型。
您可以在SomeMethod <T>中添加以下檢查:
if (!SomeType.IsAssignableFrom(typeof(T))) throw new Exception("Expecting type stored in SomeType.");
或者我會將類更改為模板化:
public class SomeClass<T>
{
public Type InstanceType { get { return typeof(T); } }
public void SomeMethod<T> () { }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.