Я хотел бы использовать HashSet в powershell сценарии. Я думаю, что выяснил, как инстанцировать объектов универсального набора путем выполнения:
[type] $strType = "string"
$listClass = [System.Collections.Generic.List``1]
$listObject = $base.MakeGenericType(@($t))
$myList = New-Object $setObject
Это хорошо работает для списков и словарей, но когда я пытаюсь создать HashSet, я добираюсь:
Unable to find type [System.Collections.Generic.HashSet`1]: make sure that the assembly containing this type is loaded.
Таким образом, это похоже теперь, что я должен загрузить System.Core.dll, но я, может казаться, не заставляю powershell загружать тот блок. Например, вызов [Система. Отражение. Блок]:: LoadWithPartialName ("Система. Ядро"), вызывает это исключение:
"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."
Какие-либо указатели?
PowerShell 2.0 упрощает эту задачу, 1) добавляя команду Add-Type для загрузки сборки и 2) обновляя синтаксис, чтобы упростить указание закрытого общего имени типа, например:
PS> Add-Type -AssemblyName System.Core
PS> $h = new-object 'System.Collections.Generic.HashSet[string]'
PS> $h.Add('f')
True