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

时间:2014-05-12 19:15:45

标签: c# generics

我有一个我要调用的对象的泛型方法。但是在那一刻我不知道T,我所知道的是T的类型,它被设置为对象的属性。

public calass SomeClass{

    public Type SomeType { get; set; }

    public void SomeMethod<T>(){

    }    
}

...

var instance = new SomeClass();

...

是否可以做这样的事情?

instance.SomeMethod<SomeType>();

2 个答案:

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