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[]
Массив объектов Type, которые представляют аргументы универсального типа. Возвращает пустой массив, если текущий тип не является универсальным.
Исключения
Вызванный метод не поддерживается в базовом классе. Реализацию должны обеспечивать производные классы.
Примеры
В следующем примере кода метод используется GetGenericArguments для вывода аргументов сконструированного типа и параметров типа его определения универсального типа.
Этот пример кода является частью большого примера, приведенного для IsGenericTypeDefinition Свойства. Пример выходных данных см. в примере выше.
if ( t->IsGenericType )
{
// If this is a generic type, display the type arguments.
//
array<Type^>^typeArguments = t->GetGenericArguments();
Console::WriteLine( L"\tList type arguments ({0}):",
typeArguments->Length );
System::Collections::IEnumerator^ myEnum =
typeArguments->GetEnumerator();
while ( myEnum->MoveNext() )
{
Type^ tParam = safe_cast<Type^>(myEnum->Current);
// If this is a type parameter, display its
// position.
//
if ( tParam->IsGenericParameter )
{
Console::WriteLine(
L"\t\t{0}\t(unassigned - parameter position {1})",
tParam, tParam->GenericParameterPosition );
}
else
{
Console::WriteLine( L"\t\t{0}", tParam );
}
}
}
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.
'
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
Комментарии
Элементы массива возвращаются в том порядке, в котором они отображаются в списке аргументов типа для универсального типа.
Если текущий тип является закрытым сконструированным типом (то есть ContainsGenericParameters свойство возвращает
false
), то массив, возвращаемый методом, GetGenericArguments содержит типы, которые были назначены параметрам универсального типа определения универсального типа.Если текущий тип является определением универсального типа, массив содержит параметры типа.
Если текущий тип является открытым сконструированным типом (то есть ContainsGenericParameters свойство возвращает
true
), в котором определенные типы не были назначены всем параметрам типа и параметрам типа для включающих универсальных типов или методов, массив содержит оба типа и параметры типа. Используйте IsGenericParameter свойство, чтобы отличить их друг от друга. Демонстрацию этого сценария см. в примере кода для ContainsGenericParameters Свойства.
Список неизменяемых условий для терминов, используемых в отражении универсальных типов, см. в примечаниях к описанию свойства IsGenericType.