C# 将类型传递给由类型对象确定的泛型方法
我有一个要调用的对象的泛型方法。但当时我对T一无所知,我只知道T的类型,它被设置为对象的一个属性C# 将类型传递给由类型对象确定的泛型方法,c#,generics,C#,Generics,我有一个要调用的对象的泛型方法。但当时我对T一无所知,我只知道T的类型,它被设置为对象的一个属性 public calass SomeClass{ public Type SomeType { get; set; } public void SomeMethod<T>(){ } } 有可能这样做吗 instance.SomeMethod<SomeType>(); instance.SomeMethod(); 是的,您可以使用反射
public calass SomeClass{
public Type SomeType { get; set; }
public void SomeMethod<T>(){
}
}
有可能这样做吗
instance.SomeMethod<SomeType>();
instance.SomeMethod();
是的,您可以使用反射:
var method = instance.GetType().GetMethod("SomeMethod")
.MakeGenericMethod(instance.SomeType);
method.Invoke(instance);
另请注意,
SomeType
是属性的名称,而不是属性的类型。当您要调用泛型方法时,需要指定类型。您可以在SomeMethod中添加以下签入:
或者我会将类更改为模板化:
public class SomeClass<T>
{
public Type InstanceType { get { return typeof(T); } }
public void SomeMethod<T> () { }
}
公共类SomeClass
{
公共类型InstanceType{get{return typeof(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> () { }
}