Partilhar via


Type.GetGenericArguments Método

Definição

Retorna uma matriz de Type objetos 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 Type objetos que representam os argumentos de tipo de um tipo genérico. Retorna uma matriz vazia se o tipo atual não for um tipo genérico.

Exceções

Não há suporte para o método invocado na classe base. 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 obter uma saída de exemplo.

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

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, a ContainsGenericParameters propriedade retornará true) no qual tipos específicos não foram atribuídos a todos os parâmetros de tipo e parâmetros de tipo de entre tipos genéricos ou métodos, a matriz conterá tipos e parâmetros de tipo. Use a IsGenericParameter propriedade para diferenciá-las. Para obter uma demonstração desse cenário, consulte o exemplo de código da ContainsGenericParameters propriedade.

Para obter uma lista das condições invariantes para termos usados na reflexão genérica, veja as observações da propriedade IsGenericType.

Aplica-se a

Confira também