Type.GetGenericArguments Metoda

Definice

Vrátí pole Type objektů, které reprezentují argumenty typu pro uzavřený obecný typ nebo parametry typu definice obecného typu.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()

Návraty

Type[]

Pole Type objektů, které reprezentují argumenty typu obecného typu.An array of Type objects that represent the type arguments of a generic type. Vrátí prázdné pole, pokud aktuální typ není obecný typ.Returns an empty array if the current type is not a generic type.

Výjimky

Vyvolaná metoda není v základní třídě podporována.The invoked method is not supported in the base class. Odvozené třídy musí poskytovat implementaci.Derived classes must provide an implementation.

Příklady

Následující příklad kódu používá GetGenericArguments metodu k zobrazení argumentů typu konstruovaného typu a parametrů typu jeho definice obecného typu.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.

Tento příklad kódu je součástí většího příkladu, který je k dispozici pro IsGenericTypeDefinition vlastnost.This code example is part of a larger example provided for the IsGenericTypeDefinition property. Podívejte se na větší příklad výstupu s ukázkami.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

Poznámky

Prvky pole jsou vraceny v pořadí, v jakém jsou uvedeny v seznamu argumentů typu pro obecný typ.The array elements are returned in the order in which they appear in the list of type arguments for the generic type.

  • Pokud je aktuální typ uzavřený konstruovaný typ (to znamená, že se ContainsGenericParameters vrátí vlastnost false ), pole vrácené GetGenericArguments metodou obsahuje typy, které byly přiřazeny k parametrům obecného typu definice obecného typu.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.

  • Pokud je aktuální typ definicí obecného typu, pole obsahuje parametry typu.If the current type is a generic type definition, the array contains the type parameters.

  • Pokud je aktuální typ otevřený konstruovaný typ (to znamená, že se ContainsGenericParameters vrátí vlastnost true ), ve které konkrétní typy nebyly přiřazeny ke všem parametrům typu a parametry typu nadřazených obecných typů nebo metod, pole obsahuje oba typy i parametry typu.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. Pomocí IsGenericParameter vlastnosti je můžete říct od sebe.Use the IsGenericParameter property to tell them apart. Ukázku tohoto scénáře naleznete v příkladu kódu pro ContainsGenericParameters vlastnost.For a demonstration of this scenario, see the code example for the ContainsGenericParameters property.

Seznam neutrálních podmínek pro výrazy používané v obecné reflexi naleznete v tématu IsGenericType Vlastnosti.For a list of the invariant conditions for terms used in generic reflection, see the IsGenericType property remarks.

Platí pro

Viz také