Type.GetGenericArguments Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Devolve um array 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érica.
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()
Devoluções
Um array de Type objetos que representam os argumentos de tipo de um tipo genérico. Devolve um array vazio se o tipo atual não for genérico.
Exceções
O método invocado não é suportado na classe base. As classes derivadas devem fornecer uma implementação.
Exemplos
O exemplo de código seguinte utiliza o GetGenericArguments método para mostrar os argumentos de tipo de um tipo construído e os parâmetros de tipo da sua definição genérica de tipo.
Este exemplo de código faz parte de um exemplo mais amplo fornecido para a IsGenericTypeDefinition propriedade. Veja o exemplo maior para a saída da amostra.
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
Observações
Os elementos do array são devolvidos pela 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 (isto é, a ContainsGenericParameters propriedade devolve
false), o array devolvido pelo GetGenericArguments método contém os tipos que foram atribuídos aos parâmetros genéricos do tipo da definição genérica.Se o tipo atual for uma definição genérica, o array contém os parâmetros do tipo.
Se o tipo atual for um tipo aberto construído (isto é, a ContainsGenericParameters propriedade devolve
true) em que tipos específicos não foram atribuídos a todos os parâmetros de tipo e aos parâmetros de tipo dos tipos ou métodos genéricos que envolvem, o array contém tanto tipos como parâmetros de tipo. Usa a IsGenericParameter propriedade para os distinguir. Para uma demonstração deste cenário, veja o exemplo do código para a ContainsGenericParameters propriedade.
Para obter uma lista das condições invariáveis para termos usados em reflexão genérica, consulte as observações da propriedade IsGenericType.