una siguientes metodos listas las genérica genericas estructuras cuál colección colecciones clases .net powershell powershell-v1.0

.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.