Type.GetGenericArguments Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna uma matriz de Type objetos que representam os argumentos de tipo de um tipo genérico fechado ou os parâmetros de tipo de uma definição de tipo genérico.
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()
Retornos
Uma matriz de Type objetos que representam os argumentos de tipo de um tipo genérico. Retorna uma matriz vazia se o tipo atual não for um tipo genérico.
Exceções
Não há suporte para o método invocado na classe base. Classes derivadas devem fornecer uma implementação.
Exemplos
O exemplo de código a seguir usa o GetGenericArguments método para exibir os argumentos de tipo de um tipo construído e os parâmetros de tipo de sua definição de tipo genérico.
Este exemplo de código faz parte de um exemplo maior fornecido para a IsGenericTypeDefinition propriedade. Consulte o exemplo maior para obter uma saída de exemplo.
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
Comentários
Os elementos da matriz são retornados na ordem em que aparecem na lista de argumentos de tipo para o tipo genérico.
Se o tipo atual for um tipo construído fechado (ou seja, a ContainsGenericParameters propriedade retornará
false), a matriz retornada pelo GetGenericArguments método conterá os tipos que foram atribuídos aos parâmetros de tipo genérico da definição de tipo genérico.Se o tipo atual for uma definição de tipo genérico, a matriz conterá os parâmetros de tipo.
Se o tipo atual for um tipo construído aberto (ou seja, a ContainsGenericParameters propriedade retornará
true) no qual tipos específicos não foram atribuídos a todos os parâmetros de tipo e parâmetros de tipo de entre tipos genéricos ou métodos, a matriz conterá tipos e parâmetros de tipo. Use a IsGenericParameter propriedade para diferenciá-las. Para obter uma demonstração desse cenário, consulte o exemplo de código da ContainsGenericParameters propriedade.
Para obter uma lista das condições invariantes para termos usados na reflexão genérica, veja as observações da propriedade IsGenericType.