私のプロジェクトでは、次のクラスを使用します:Filter<T>.Checker<U>
にはインタフェースICheckerもあります。それは次のようになります。C#の汎用クラスのネストされた汎用クラスの型を取得します
class Filter<T> {
public interface IChecker {
...
}
public class Checker<U> : IChecker {
...
}
List<IChecker> checkers;
...
}
Filterクラスは、フィルタがUが
T.でこのフィールドのタイプであるクラスTで異なるフィールドをチェックするためにiCheckerリストを使用するタイプ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#のGenericクラスにネストされたGenericクラスの型を取得することは可能ですか?
に追加するには、すでに答えを掲載 - それは[MSDN](HTTPS上の文書で説明しています: //msdn.microsoft.com/en-us/library/system.type.makegenerictype%28v=vs.110%29.aspx)。 **ネストされた型**セクション、特に:* "ネスト型のジェネリック型定義からジェネリック型を構築するには、すべての囲み型の型引数配列を連結した配列でMakeGenericTypeメソッドを呼び出し、一番外側のジェネリック型から始まり、ネストされた型自体の型引数配列で終わる場合、 – MarcinJuraszek