Condividi tramite


Type.GetGenericArguments Metodo

Definizione

Restituisce una matrice di Type oggetti che rappresentano gli argomenti di tipo di un tipo generico chiuso o i parametri di tipo di una definizione di tipo generico.

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

Restituisce

Type[]

Matrice di Type oggetti che rappresentano gli argomenti di tipo di un tipo generico. Restituisce una matrice vuota se il tipo corrente non è un tipo generico.

Eccezioni

Il metodo richiamato non è supportato nella classe base. Le classi derivate devono fornire un'implementazione.

Esempio

Nell'esempio di codice seguente viene utilizzato il GetGenericArguments metodo per visualizzare gli argomenti di tipo di un tipo costruito e i parametri di tipo della relativa definizione di tipo generico.

Questo esempio di codice fa parte di un esempio più ampio fornito per la IsGenericTypeDefinition proprietà . Vedere l'esempio più grande per l'output di esempio.

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

Commenti

Gli elementi della matrice vengono restituiti nell'ordine in cui vengono visualizzati nell'elenco di argomenti di tipo per il tipo generico.

  • Se il tipo corrente è un tipo costruito chiuso ( ovvero la ContainsGenericParameters proprietà restituisce false), la matrice restituita dal GetGenericArguments metodo contiene i tipi assegnati ai parametri di tipo generico della definizione del tipo generico.

  • Se il tipo corrente è una definizione di tipo generico, la matrice contiene i parametri di tipo.

  • Se il tipo corrente è un tipo costruito aperto ,ovvero la ContainsGenericParameters proprietà restituisce true) in cui non sono stati assegnati tipi specifici a tutti i parametri di tipo e ai parametri di tipo di inclusione di tipi o metodi generici, la matrice contiene sia tipi che parametri di tipo. Utilizzare la IsGenericParameter proprietà per distinguerle. Per una dimostrazione di questo scenario, vedere l'esempio di codice per la ContainsGenericParameters proprietà .

Per un elenco delle condizioni invarianti per i termini usati nella reflection generica, vedere le note sulla proprietà IsGenericType.

Si applica a

Vedi anche