Type.GetGenericArguments Método

Definição

Retorna uma matriz de objetos Type que representam os argumentos de tipo de um tipo genérico fechado ou os parâmetros de tipo de uma definição de tipo genérico.

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()

Retornos

Type[]

Uma matriz de objetos Type que representam os argumentos de tipo de um tipo genérico. Retorna uma matriz vazia se o tipo atual não é um tipo genérico.

Exceções

O método chamado não é suportado na classe base. As classes derivadas devem fornecer uma implementação.

Exemplos

O exemplo de código a seguir usa o GetGenericArguments método para exibir os argumentos de tipo de um tipo construído e os parâmetros de tipo de sua definição de tipo genérico.

Este exemplo de código faz parte de um exemplo maior fornecido para a IsGenericTypeDefinition propriedade. Consulte o exemplo maior para saída de exemplo.

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

Comentários

Os elementos da matriz são retornados na ordem em que aparecem na lista de argumentos de tipo para o tipo genérico.

  • Se o tipo atual for um tipo construído fechado (ou seja, a ContainsGenericParameters Propriedade retornar false ), a matriz retornada pelo GetGenericArguments método conterá os tipos que foram atribuídos aos parâmetros de tipo genérico da definição de tipo genérico.

  • Se o tipo atual for uma definição de tipo genérico, a matriz conterá os parâmetros de tipo.

  • Se o tipo atual for um tipo construído aberto (ou seja, o ContainsGenericParameters retorno da propriedade true ) no qual tipos específicos não foram atribuídos a todos os parâmetros de tipo e parâmetros de tipo dos tipos genéricos delimitadores ou métodos, a matriz conterá os tipos e os parâmetros de tipo. Use a IsGenericParameter propriedade para diferenciá-las. Para ver uma demonstração desse cenário, consulte o exemplo de código para a ContainsGenericParameters propriedade.

Para obter uma lista das condições invariáveis para termos usados na reflexão genérica, consulte os comentários da propriedade IsGenericType.

Aplica-se a

Confira também