簡體   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