about_Calling_Generic_Methods
Los genéricos permiten personalizar un método, clase, estructura o interfaz con respecto a los datos precisos sobre los que se actúa. Por ejemplo, en lugar de usar la Hashtable clase , que permite que las claves y los valores sean de cualquier tipo, puede usar la Dictionary<TKey,TValue> clase genérica y especificar los tipos permitidos para las propiedades de clave y valor . Los genéricos proporcionan mayor reutilización de código y seguridad de tipos.
Para algunos métodos genéricos, PowerShell puede averiguar argumentos genéricos para un método mediante la inferencia de los argumentos proporcionados. Sin embargo, la resolución de métodos puede ser complicada cuando un método tiene sobrecargas genéricas y no genéricas, o cuando el método genérico no toma ningún parámetro formal. PowerShell puede no resolver el método correcto sin los argumentos explícitos del método genérico.
Por ejemplo, [Array]::Empty<T>()
. La clase Array de .NET tiene un método Empty<T>()
estático y genérico que no toma parámetros formales.
Antes de PowerShell 7.3, para asegurarse de que la resolución de métodos adecuada tenía que usar soluciones alternativas complicadas mediante la reflexión de .NET. Para obtener un ejemplo, consulte la entrada de blog de Lee Holmes invocación de métodos genéricos en clases no genéricas en PowerShell.
A partir de PowerShell 7.3, puede especificar los tipos de un método genérico.
Sintaxis
Un método genérico es un método con dos listas de parámetros: una lista de tipos genéricos y una lista de argumentos de método.
En los ejemplos siguientes se muestra la nueva sintaxis de PowerShell para acceder a un 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)
generic_type_arguments
puede ser una lista de tipos únicos o separadas por comas, como [string, int]
, incluidos otros tipos genéricos, como$obj.MethodName[string, System.Collections.Generic.Dictionary[string, int]]()
method_arguments
puede ser cero o más elementos.
Para más información, vea Elementos genéricos en .NET.
Ejemplo
En este ejemplo, creamos una lista de enteros y, a continuación, usamos la System.Linq.Enumerable
clase para enumerar los valores y transformarlos en un nuevo valor.
La variable $list
es un objeto genérico List<T>
que solo puede contener enteros. List<T>
es una clase genérica que permite especificar el tipo de sus miembros al crearlo.
[System.Linq.Enumerable]::Select<T1,T2>(T1,T2)
es un método genérico que requiere dos parámetros de tipo genérico y dos 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
La salida muestra cada valor elevado a la potencia de 3.
1
8
27
64
125
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de