繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM