Type.GetGenericArguments Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает массив Type объектов, представляющих аргументы типа закрытого универсального типа или параметры типа определения универсального типа.
public:
virtual cli::array <Type ^> ^ GetGenericArguments();
public virtual Type[] GetGenericArguments();
abstract member GetGenericArguments : unit -> Type[]
override this.GetGenericArguments : unit -> Type[]
Public Overridable Function GetGenericArguments () As Type()
Возвращаемое значение
Массив Type объектов, представляющих аргументы типа универсального типа. Возвращает пустой массив, если текущий тип не является универсальным типом.
Исключения
Вызываемый метод не поддерживается в базовом классе. Производные классы должны предоставлять реализацию.
Примеры
В следующем примере кода метод используется GetGenericArguments для отображения аргументов типа созданного типа и параметров типа определения универсального типа.
Этот пример кода является частью более крупного примера, предоставленного для IsGenericTypeDefinition свойства. Пример выходных данных см. в более крупном примере.
if (t.IsGenericType)
{
// If this is a generic type, display the type arguments.
//
Type[] typeArguments = t.GetGenericArguments();
Console.WriteLine("\tList type arguments ({0}):",
typeArguments.Length);
foreach (Type tParam in typeArguments)
{
// If this is a type parameter, display its
// position.
//
if (tParam.IsGenericParameter)
{
Console.WriteLine("\t\t{0}\t(unassigned - parameter position {1})",
tParam,
tParam.GenericParameterPosition);
}
else
{
Console.WriteLine("\t\t{0}", tParam);
}
}
}
if t.IsGenericType then
// If this is a generic type, display the type arguments.
let typeArguments = t.GetGenericArguments()
printfn $"\tList type arguments ({typeArguments.Length}):"
for tParam in typeArguments do
// If this is a type parameter, display its
// position.
if tParam.IsGenericParameter then
printfn $"\t\t{tParam}\t(unassigned - parameter position {tParam.GenericParameterPosition})"
else
printfn $"\t\t{tParam}"
If t.IsGenericType Then
' If this is a generic type, display the type arguments.
'
Dim typeArguments As Type() = t.GetGenericArguments()
Console.WriteLine(vbTab & "List type arguments (" _
& typeArguments.Length & "):")
For Each tParam As Type In typeArguments
' If this is a type parameter, display its position.
'
If tParam.IsGenericParameter Then
Console.WriteLine(vbTab & vbTab & tParam.ToString() _
& vbTab & "(unassigned - parameter position " _
& tParam.GenericParameterPosition & ")")
Else
Console.WriteLine(vbTab & vbTab & tParam.ToString())
End If
Next tParam
End If
Комментарии
Элементы массива возвращаются в порядке, в котором они отображаются в списке аргументов типа для универсального типа.
Если текущий тип является закрытым созданным типом (то есть свойство возвращает
false), массив, возвращаемый GetGenericArguments методом, ContainsGenericParameters содержит типы, назначенные параметрам универсального типа определения универсального типа.Если текущий тип является определением универсального типа, массив содержит параметры типа.
Если текущий тип является открытым созданным типом (т ContainsGenericParameters . е. возвращается
trueсвойство), в котором определенные типы не назначены всем параметрам типа и параметрам типа включающих универсальные типы или методы, массив содержит как типы, так и параметры типа. IsGenericParameter Используйте свойство, чтобы определить их друг от друга. Демонстрация этого сценария см. в примере кода для ContainsGenericParameters свойства.
Список инвариантных условий терминов, используемых в универсальном отражении, см. в IsGenericType примечаниях свойств.