繁体   English   中英

将类型传递给泛型类

[英]pass type to generic class

我正在通过EF的ObjectStateEntry进行循环,因此我可以访问enrty.Entity,我在poco类上进行了一些静态验证,并且我还想进行业务规则验证,因此我创建了一个库来执行此操作,现在我有了这行期望类型为客户的代码。

 MyEntityValidator<needtypehere> ev = new MyEntityValidator<needtyehere>(new EntityValidator());

所以我在传递'needtypehere'的类型时遇到了问题。 我尝试了entry.Entity.GetType()但没有工作。 同样,这是该方法的标志

GetErrors(this ObjectStateEntry entry)

要从Type实例调用泛型,您必须使用:

Type closedType = typeof(MyEntityValidator<>)
         .MakeGenericType(entry.Entity.GetType());
object obj = Activator.CreateInstance(closedType);

这很尴尬-因为您需要用反射做很多其他工作。 另外,您可以调用执行代码的通用方法

public static void InvokeGeneric<T>(...) {
    MyEntityValidator<T> ev = new MyEntityValidator<T>(
        new EntityValidator());
    ... etc; lots more code that uses ev
}
...
typeof(ContainingType).GetMethod("InvokeGeneric").MakeGenericMethod(
    entry.Entity.GetType()).Invoke(null, args);

您可以使用MakeGenericType

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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