[英]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.