この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は正確にはわかっていないため (型引数が型定義であるため)、ContainsGenericParametersistrueです。
ContainsGenericParametersの再帰バージョンですIsGenericTypeDefinition。
typeof(List<Func<>>).IsGenericTypeDefinitionは偽です。
IsGenericTypeいくつかの違いを強調しようとする下の表があります。
IsGenericTypeDefinitionプロパティは true です。ジェネリック型を定義します。構築された型は、ジェネリック型定義を表すオブジェクトで
MakeGenericTypeメソッドを呼び出し、型引数の配列を指定することによって作成されます。Type
また:
ContainsGenericParametersプロパティは true です。
ContainsGenericParameters例としては、割り当てられていない型パラメーターを持つジェネリック型、ジェネリック型定義または開いて構築された型で入れ子になっている型、またはプロパティが trueである型引数を持つジェネリック型があります。
したがって、それらは正確には同じではありません。