Type.GetGenericArguments 方法

定义

返回表示封闭式泛型类型的类型参数或泛型类型定义的类型参数的 Type 对象的数组。Returns an array of Type objects that represent the type arguments of a closed generic type or the type parameters of a generic type definition.

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 对象的数组。An array of Type objects that represent the type arguments of a generic type. 如果当前类型不是泛型类型,则返回一个空数组。Returns an empty array if the current type is not a generic type.

异常

基类不支持调用的方法。The invoked method is not supported in the base class. 派生类必须提供一个实现。Derived classes must provide an implementation.

示例

下面的代码示例使用 GetGenericArguments 方法来显示构造类型的类型参数及其泛型类型定义的类型参数。The following code example uses the GetGenericArguments method to display the type arguments of a constructed type and the type parameters of its generic type definition.

此代码示例是为 IsGenericTypeDefinition 属性提供的更大示例的一部分。This code example is part of a larger example provided for the IsGenericTypeDefinition property. 请参阅示例输出的更大示例。See the larger example for sample output.

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

注解

数组元素按它们出现在泛型类型的类型参数列表中的顺序返回。The array elements are returned in the order in which they appear in the list of type arguments for the generic type.

  • 如果当前类型是封闭式构造类型(即,ContainsGenericParameters 属性返回 false),则 GetGenericArguments 方法返回的数组包含已分配给泛型类型定义的泛型类型参数的类型。If the current type is a closed constructed type (that is, the ContainsGenericParameters property returns false), the array returned by the GetGenericArguments method contains the types that have been assigned to the generic type parameters of the generic type definition.

  • 如果当前类型是泛型类型定义,则数组包含类型参数。If the current type is a generic type definition, the array contains the type parameters.

  • 如果当前类型为开放式构造类型(即,ContainsGenericParameters 属性返回 true),其中特定类型尚未分配给封闭泛型类型或方法的所有类型参数和类型参数,则数组同时包含类型和类型参数。If the current type is an open constructed type (that is, the ContainsGenericParameters property returns true) in which specific types have not been assigned to all of the type parameters and type parameters of enclosing generic types or methods, the array contains both types and type parameters. 使用 IsGenericParameter 属性将它们区分开来。Use the IsGenericParameter property to tell them apart. 有关此方案的演示,请参阅 ContainsGenericParameters 属性的代码示例。For a demonstration of this scenario, see the code example for the ContainsGenericParameters property.

有关泛型反射中使用的术语的固定条件列表,请参阅 IsGenericType 属性注解。For a list of the invariant conditions for terms used in generic reflection, see the IsGenericType property remarks.

适用于

另请参阅