.net - siguientes - metodos de listas en c#
Colecciones genéricas de PowerShell (3)
He estado adentrándome en .NET Framework en PowerShell, y he llegado a algo que no entiendo. Esto funciona bien:
$foo = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]"
$foo.Add("FOO", "BAR")
$foo
Key Value
--- -----
FOO BAR
Esto sin embargo no:
$bar = New-Object "System.Collections.Generic.SortedDictionary``2[System.String,System.String]"
New-Object : Cannot find type [System.Collections.Generic.SortedDictionary`2[System.String,System.String]]: make sure t
he assembly containing this type is loaded.
At line:1 char:18
+ $bar = New-Object <<<< "System.Collections.Generic.SortedDictionary``2[System.String,System.String]"
Ambos están en la misma asamblea, entonces ¿qué me estoy perdiendo?
Como se señaló en las respuestas, esto es más o menos un problema con PowerShell v1.
El diccionario <K, V> no está definido en el mismo conjunto que SortedDictionary <K, V>. Uno está en mscorlib y el otro en system.dll.
Ahí yace el problema. El comportamiento actual de PowerShell es que, al resolver los parámetros genéricos especificados, si los tipos no son nombres de tipos completamente calificados, se supone que están en el mismo ensamblaje que el tipo genérico que está intentando crear.
En este caso, significa que está buscando System.String en System.dll, y no en mscorlib, por lo que falla.
La solución es especificar el nombre completo del ensamblaje para los tipos de parámetros genéricos. Es extremadamente feo, pero funciona:
$bar = new-object "System.Collections.Generic.Dictionary``2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
En PowerShell 2.0, la nueva forma de crear un Dictionary
es:
$object = New-Object ''system.collections.generic.dictionary[string,int]''
Hay algunos problemas con Generics en PowerShell. Lee Holmes, un desarrollador del equipo de PowerShell, publicó este script para crear genéricos.