Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
Um tipo genérico é uma definição de tipo parametrizado que você instancia com argumentos de tipo concreto (como List<T>), dando código reutilizável e seguro de tipo que o compilador e o CLR lidam com eficiência.
Descrição longa
Os genéricos permitem que você adapte um método, uma classe, uma estrutura ou uma interface para o tipo de dados preciso em que ele atua. Por exemplo, em vez de usar a classe System.Collections.Hashtable , que permite que chaves e valores sejam de qualquer tipo, você pode usar a classe genérica System.Collections.Generic.Dictionary e especificar os tipos permitidos para as propriedades de chave e valor . Genéricos fornecem maior capacidade de reutilização de código e segurança de tipo.
Para alguns métodos genéricos, o PowerShell é capaz de descobrir argumentos genéricos para um método inferindo dos argumentos fornecidos. No entanto, a resolução do método pode ser complicada quando um método tem sobrecargas genéricas e não genéricas ou quando o método genérico não usa nenhum parâmetro formal. O PowerShell pode falhar ao resolver o método correto sem os argumentos de método genérico explícitos.
Por exemplo, [array]::Empty[T](). A classe .NET Array tem um método estático e genérico Empty[T]() que não usa parâmetros formais.
Antes do PowerShell 7.3, para garantir a resolução de método adequada, você precisava usar soluções alternativas complicadas usando a reflexão do .NET. Para obter um exemplo, consulte a postagem no blog de Lee Holmes Invocando métodos genéricos em classes não genéricas no PowerShell.
A partir do PowerShell 7.3, você pode especificar os tipos de um método genérico.
Sintaxe
Um método genérico é um método com duas listas de parâmetros: uma lista de tipos genéricos e uma lista de argumentos de método.
Os exemplos a seguir mostram a nova sintaxe do PowerShell para acessar um método genérico:
# static generic methods
[type_name]::MethodName[generic_type_arguments](method_arguments)
# instance generic methods
$object.MethodName[generic_type_arguments](method_arguments)
O generic_type_arguments pode ser um único tipo ou uma lista separada por vírgulas de tipos, como [string, int], incluindo outros tipos genéricos, como $obj.MethodName[string, System.Collections.Generic.Dictionary[string, int]]()
O method_arguments pode ser zero ou mais itens.
Para saber mais, confira Genéricos no .NET.
Example
Neste exemplo, criamos uma lista de inteiros e usamos a classe System.Linq.Enumerable para enumerar os valores e transformá-los em um novo valor.
A variável $list é um objeto List[T] genérico que só pode conter inteiros.
List[T] é uma classe genérica que permite especificar o tipo de seus membros ao criá-la.
[System.Linq.Enumerable]::Select[T1,T2](T1,T2) é um método genérico que exige dois parâmetros de tipo genérico e dois parâmetros de valor formal.
[System.Collections.Generic.List[int]]$list = @( 1, 2, 3, 4, 5 )
$result = [System.Linq.Enumerable]::Select[int, float](
$list,
[Func[int, float]]{
param($Item)
[Math]::Pow($Item, 3)
}
)
$result
A saída mostra cada valor elevado à potência de 3.
1
8
27
64
125