C# 将类型传递给由类型对象确定的泛型方法

C# 将类型传递给由类型对象确定的泛型方法,c#,generics,C#,Generics,我有一个要调用的对象的泛型方法。但当时我对T一无所知,我只知道T的类型,它被设置为对象的一个属性 public calass SomeClass{ public Type SomeType { get; set; } public void SomeMethod<T>(){ } } 有可能这样做吗 instance.SomeMethod<SomeType>(); instance.SomeMethod(); 是的,您可以使用反射

我有一个要调用的对象的泛型方法。但当时我对T一无所知,我只知道T的类型,它被设置为对象的一个属性

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> () { }
}