Поделиться через


MethodInfo.GetGenericArguments Метод

Определение

Возвращает массив объектов Type, которые представляют аргументы универсального метода, относящиеся к типу, или параметры типа определения универсального метода.

public:
 override cli::array <Type ^> ^ GetGenericArguments();
public override Type[] GetGenericArguments ();
[System.Runtime.InteropServices.ComVisible(true)]
public override Type[] GetGenericArguments ();
override this.GetGenericArguments : unit -> Type[]
[<System.Runtime.InteropServices.ComVisible(true)>]
override this.GetGenericArguments : unit -> Type[]
Public Overrides Function GetGenericArguments () As Type()

Возвращаемое значение

Type[]

Массив объектов Type, представляющих аргументы типа, относящиеся к универсальному методу, или параметры типа определения универсального метода. Возвращает пустой массив, если текущий метод не является универсальным методом.

Атрибуты

Исключения

Этот метод не поддерживается.

Примеры

В следующем примере кода показано, как получить аргументы типа универсального метода и отобразить их.

Этот пример является частью более крупного примера, предоставленного MakeGenericMethod для метода .

// If this is a generic method, display its type arguments.
//
if (mi->IsGenericMethod)
{
    array<Type^>^ typeArguments = mi->GetGenericArguments();

    Console::WriteLine("\tList type arguments ({0}):", 
        typeArguments->Length);

    for each (Type^ tParam in typeArguments)
    {
        // IsGenericParameter is true only for generic type
        // parameters.
        //
        if (tParam->IsGenericParameter)
        {
            Console::WriteLine("\t\t{0}  parameter position {1}" +
                "\n\t\t   declaring method: {2}",
                tParam,
                tParam->GenericParameterPosition,
                tParam->DeclaringMethod);
        }
        else
        {
            Console::WriteLine("\t\t{0}", tParam);
        }
    }
}
// If this is a generic method, display its type arguments.
//
if (mi.IsGenericMethod)
{
    Type[] typeArguments = mi.GetGenericArguments();

    Console.WriteLine("\tList type arguments ({0}):",
        typeArguments.Length);

    foreach (Type tParam in typeArguments)
    {
        // IsGenericParameter is true only for generic type
        // parameters.
        //
        if (tParam.IsGenericParameter)
        {
            Console.WriteLine("\t\t{0}  parameter position {1}" +
                "\n\t\t   declaring method: {2}",
                tParam,
                tParam.GenericParameterPosition,
                tParam.DeclaringMethod);
        }
        else
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}
' If this is a generic method, display its type arguments.
'
If mi.IsGenericMethod Then
    Dim typeArguments As Type() = mi.GetGenericArguments()
    
    Console.WriteLine(vbTab & "List type arguments ({0}):", _
        typeArguments.Length)
    
    For Each tParam As Type In typeArguments
        ' IsGenericParameter is true only for generic type
        ' parameters.
        '
        If tParam.IsGenericParameter Then
            Console.WriteLine(vbTab & vbTab _
                & "{0}  parameter position: {1}" _
                & vbCrLf & vbTab & vbTab _
                & "   declaring method: {2}", _
                tParam,  _
                tParam.GenericParameterPosition, _
                tParam.DeclaringMethod)
        Else
            Console.WriteLine(vbTab & vbTab & tParam.ToString())
        End If
    Next tParam
End If

Комментарии

Элементы возвращаемого массива находятся в том порядке, в котором они отображаются в списке параметров типа для универсального метода.

  • Если текущий метод является закрытым сконструированным методом (то есть свойство возвращает false), массив, ContainsGenericParameters возвращаемый методом GetGenericArguments , содержит типы, назначенные параметрам универсального типа определения универсального метода.

  • Если текущий метод является определением универсального метода, массив содержит параметры типа.

  • Если текущий метод является открытым сконструированным методом (то есть ContainsGenericParameters свойство возвращает true), в котором определенные типы были назначены некоторым параметрам типа, а параметры типа включаемых универсальных типов были назначены другим параметрам типа, массив содержит как типы, так и параметры типа. Используйте свойство , IsGenericParameter чтобы отличить их друг от друга. Демонстрацию этого сценария см. в примере кода для ContainsGenericParameters свойства .

Список инвариантных условий для терминов, относящихся к универсальным методам, см. в свойстве IsGenericMethod . Список инвариантных условий для других терминов, используемых в универсальном отражении, см. в свойстве Type.IsGenericType .

Применяется к

См. также раздел