我有一个我要调用的对象的泛型方法。但是在那一刻我不知道T,我所知道的是T的类型,它被设置为对象的属性。
public calass SomeClass{
public Type SomeType { get; set; }
public void SomeMethod<T>(){
}
}
...
var instance = new SomeClass();
...
是否可以做这样的事情?
instance.SomeMethod<SomeType>();
答案 0 :(得分:2)
是的,您可以使用Reflection:
var method = instance.GetType().GetMethod("SomeMethod")
.MakeGenericMethod(instance.SomeType);
method.Invoke(instance);
另请注意,SomeType
是您的媒体资源的名称,而不是您的媒体资源类型。您需要在调用通用方法时指定类型。
答案 1 :(得分:0)
您可以在SomeMethod&lt; T&gt;中添加以下检查:
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> () { }
}