Могу ли я использовать System.Core.dll / System.Collections.Generic.HashSet в powershell? - PullRequest
12 голосов
/ 23 июля 2010

Я бы хотел использовать 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 для загрузки этой сборки.Например, вызов [System.Reflection.Assembly] :: LoadWithPartialName ("System.Core") вызывает это исключение:

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

Любые указатели?

1 Ответ

22 голосов
/ 23 июля 2010

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...