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


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)
{
    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свойство), массив, возвращаемый GetGenericArguments методом, ContainsGenericParameters содержит типы, назначенные параметрам универсального типа определения универсального метода.

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

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

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

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

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