Вызов конструктора с аргументом Array от Powershell - PullRequest
11 голосов
/ 03 февраля 2012

Я новичок в PowerShell и хорошо знаю C #. Недавно я писал этот сценарий powershell и хотел создать Hashset. Поэтому я написал ($ azAz - это массив)

[System.Collections.Generic.HashSet[string]]$allset = New-Object System.Collections.Generic.HashSet[string]($azAZ)

и нажал запустить. Я получил это сообщение:

New-Object : Cannot find an overload for "HashSet`1" and the argument count: "52".
At filename.ps1:10 char:55
+ [System.Collections.Generic.HashSet[string]]$allset = New-Object System.Collecti ...
+                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
    + FullyQualifiedErrorId :         ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

Затем я гуглил конструкторы в powershell с параметрами массива и изменил код так:

[System.Collections.Generic.HashSet[string]]$allset = New-Object System.Collections.Generic.HashSet[string](,$azAZ)

Почему-то я теперь получаю это сообщение:

New-Object : Cannot find an overload for "HashSet`1" and the argument count: "1".
At C:\Users\youngvoid\Desktop\test5.ps1:10 char:55
+ [System.Collections.Generic.HashSet[string]]$allset = New-Object System.Collecti ...
+                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

Не удается найти перегрузку для HashSet и количество аргументов 1? Ты шутишь, что ли? Спасибо.

Ответы [ 2 ]

19 голосов
/ 03 февраля 2012

Это должно работать:

[System.Collections.Generic.HashSet[string]]$allset = $azAZ

UPDATE:

Чтобы использовать массив в конструкторе, массив должен быть строго типизирован. Вот пример:

[string[]]$a = 'one', 'two', 'three'
$b = 'one', 'two', 'three'

# This works
$hashA = New-Object System.Collections.Generic.HashSet[string] (,$a)
$hashA
# This also works
$hashB = New-Object System.Collections.Generic.HashSet[string] (,[string[]]$b)
$hashB
# This doesn't work
$hashB = New-Object System.Collections.Generic.HashSet[string] (,$b)
$hashB
1 голос
/ 03 февраля 2012

попробуй так:

C:\> $allset = New-Object System.Collections.Generic.HashSet[string]
C:\> $allset.add($azAZ)
True
...