[英]C#: Is it possible to cast a generic type for a type constraint?
我正在創建一個工廠方法,該方法根據方法調用中的泛型類型確定要返回的對象
public IDbStrategy<T> GetDefaultStrategy<T>()
{
return typeof(T).IsAssignableFrom(typeof(DbModel))
? new DefaultModelDbStrategy<T>()
: new DefaultDbStrategy<T>();
}
DefaultModelDbStrategy
作為where T : DbModel
的類型約束,但DefaultDbStrategy
沒有。 嘗試使用T
作為DefaultModelDbStrategy
的泛型類型時出現編譯器錯誤,因為編譯器不知道T
是DbModel
。 有沒有辦法確保我的編譯器傳入的泛型參數確實從DbModel
派生,如上面的反射語句斷言?
謝謝
不是沒有反思。 因為T
是在編譯時靜態解析的,編譯器需要實例化類型DefaultModelDbStrategy<object>
(如果 T 是object
),但這是一個非法類型。 方法中使用的類型需要在方法被 JIT 時解析,而不僅僅是在執行特定行時。
不過有一個使用反射的解決方法:你可以做
Activator.CreateInstance(typeof(DefaultModelDbStrategy<>).MakeGenericType(typeof(T));
這將使用給定的 T 創建一個 DefaultModelDbStrategy 實例。如果 T 不滿足約束,它將拋出運行時錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.