2010-07-23 7 views
11

Ich möchte ein HashSet in einem Powershell-Skript verwenden. Ich glaube, ich habe herausgefunden, wie generische Auflistung Objekte instanziiert by doing:Kann ich System.Core.dll/System.Collections.Generic.HashSet in Powershell verwenden?

[type] $strType = "string" 
$listClass = [System.Collections.Generic.List``1] 
$listObject = $base.MakeGenericType(@($t)) 
$myList = New-Object $setObject 

Dies funktioniert gut für Listen und Wörterbücher, aber wenn ich versuche, ein HashSet ich zu erstellen:

Unable to find type [System.Collections.Generic.HashSet`1]: make sure that the assembly containing this type is loaded. 

So Es sieht so aus, als ob ich jetzt System.Core.dll laden muss, aber ich kann nicht scheinen, Powershell zu bekommen, um diese Versammlung zu laden. Zum Beispiel ruft [System.Reflection.Assembly] :: LoadWithPartialName ("System.Core") diese Ausnahme verursacht:

"LoadWithPartialName" with "1" argument(s): "Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified." 

Alle Zeiger?

+0

sind Sie in Powershell v1 oder v2? – x0n

+0

Ich bin auf Win2k8 R2 und Get-Host sagt Version 2.0 – nick

+2

Mögliche Duplikat: Siehe Antwort http://stackoverflow.com/questions/184476/powershell-generic-collections – zdan

Antwort

21

Powershell 2.0 macht dies einfacher durch 1) Hinzufügen des Add-Type-Cmdlets für eine Baugruppe geladen und 2) Aktualisierungen der Syntax, um einen geschlossenen generischer Typ Name einfacher zB zu machen Angabe:

PS> Add-Type -AssemblyName System.Core 
PS> $h = new-object 'System.Collections.Generic.HashSet[string]' 
PS> $h.Add('f') 
True 
+0

Funktioniert gut - danke. – nick

+0

Kann ich den Parametertyp dann in Funktionen angeben, indem ich '[Parameter (Mandatory = $ true)] [hashset]'? –

+2

Ja, aber Sie müssen den Parametertyp angeben als '[Collections.Generic.HashSet [string]]' Ersetzen Sie für Zeichenfolge den Typ, den Sie im Hashset speichern müssen. –

Verwandte Themen