このSystem.Type
型には、プロパティIsGenericTypeDefinitionおよびContainsGenericParameters が含まれています。MSDN のドキュメントを読んだ後、型がオープン ジェネリック型かクローズド ジェネリック型かを確認するために、両方のプロパティが存在すると結論付けました。
ただし、この 2 つの違いと、どちらを使用するかがわかりません。
このSystem.Type
型には、プロパティIsGenericTypeDefinitionおよびContainsGenericParameters が含まれています。MSDN のドキュメントを読んだ後、型がオープン ジェネリック型かクローズド ジェネリック型かを確認するために、両方のプロパティが存在すると結論付けました。
ただし、この 2 つの違いと、どちらを使用するかがわかりません。
Type.ContainsGenericParameters
再帰的です:
var genericList = typeof(List<>);
var listOfSomeUnknownTypeOfList = genericList.MakeGenericType(genericList);
listOfSomeUnknownTypeOfList.IsGenericTypeDefinition; // => false
listOfSomeUnknownTypeOfList.ContainsGenericParameters; // => true
ここで起こることはlistOfSomeUnknownTypeOfList
、その型パラメーターが一部の T の a であることがわかっているため、それ自体がジェネリック型定義ではないということですList<T>
。ただし、の型listOfSomeUnknownTypeOfList
は正確にはわかっていないため (型引数が型定義であるため)、ContainsGenericParameters
istrue
です。
ContainsGenericParameters
の再帰バージョンですIsGenericTypeDefinition
。
typeof(List<Func<>>).IsGenericTypeDefinition
は偽です。
IsGenericType
いくつかの違いを強調しようとする下の表があります。
IsGenericTypeDefinition
プロパティは true です。ジェネリック型を定義します。構築された型は、ジェネリック型定義を表すオブジェクトで
MakeGenericType
メソッドを呼び出し、型引数の配列を指定することによって作成されます。Type
また:
ContainsGenericParameters
プロパティは true です。
ContainsGenericParameters
例としては、割り当てられていない型パラメーターを持つジェネリック型、ジェネリック型定義または開いて構築された型で入れ子になっている型、またはプロパティが trueである型引数を持つジェネリック型があります。
したがって、それらは正確には同じではありません。