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, представляющих аргументы типа, относящиеся к универсальному методу, или параметры типа определения универсального метода. Возвращает пустой массив, если текущий метод не является универсальным методом.
- Атрибуты
Исключения
Этот метод не поддерживается.
Примеры
В следующем примере кода показано, как получить аргументы типа универсального метода и отобразить их.
Этот пример является частью более крупного примера, предоставленного 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 .