在我的項目中,我使用以下類:Filter<T>.Checker<U>
,它也具有接口IChecker。它看起來像這樣:在C#中的通用類中獲取嵌套通用類的類型
class Filter<T> {
public interface IChecker {
...
}
public class Checker<U> : IChecker {
...
}
List<IChecker> checkers;
...
}
過濾器類濾波器類型T的對象的過濾器使用IChecker列表,以檢查在T級中,U是該領域的在T.
類型不同的領域在另一個類中的其他方法中,我想創建一個檢查器的實例。在這種方法中,T的類型是Transaction,這在編譯時是已知的。 U的類型僅由Type實例知道。下面的代碼展示瞭如何通常創建一個知道類型的泛型類的實例。
Type type = typeof(MyObject<>).MakeGenericType(objectType);
object myObject = Activator.CreateInstance(type);
我想借此一點點進一步並執行以下操作:
Type type = typeof(Filter<Transaction>.Checker<>).MakeGenericType(objectType);
object myObject = Activator.CreateInstance(type);
的部分typeof(Filter<Transaction>.Checker<>)
不能編譯。編譯器說:Unexpected use of an unbounded generic name
。
是否有可能在C#中的泛型類中獲取嵌套的泛型類的類型?
要添加到已發佈的答案 - 它是在[MSDN](HTTPS的文檔中解釋說: //msdn.microsoft.com/en-us/library/system.type.makegenerictype%28v=vs.110%29.aspx)。檢查整個**嵌套類型**部分,尤其是:*「要從嵌套類型的泛型類型定義構造泛型類型,請調用MakeGenericType方法,該數組通過連接所有封閉類型的類型參數數組形成,從最外面的泛型類型開始,並以嵌套類型自身的類型參數數組結束,如果它有自己的類型參數。「* – MarcinJuraszek