Строка перегрузки класса PowerShell [] рассматривается как строка - PullRequest
2 голосов
/ 03 мая 2019

У меня есть класс с перегруженным конструктором:

MyClass([string] foo) { Write-Host "1" }

MyClass([string[]] bar) { Write-Host "2" }

Когда я запускаю следующее:

[MyClass]::new(@("my value"))

Я ожидал бы вывод "2".Вместо этого я получаю «1».Чего мне не хватает?

1 Ответ

4 голосов
/ 03 мая 2019

Это потому, что вы не передаете строковый массив. Вы передаете массив объектов. Поскольку массив объектов не определен явно, он пытается интерпретировать его с помощью первого конструктора.

Использование:

class MyClass{
MyClass([string] $foo) { Write-Host "1 $foo" }
MyClass([string[]] $bar) { Write-Host "2 $($bar)" }
}

например:.

PS C:\> $myValue = @("myvalue")
PS C:\> $myValue.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS C:\> [MyClass]::new($myValue)
1 myvalue

Если вы явно определите его как строковый массив, то он будет работать как положено:

PS C:\> [string[]] $strArr = @("strarr")
PS C:\> $strArr.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String[]                                 System.Array


PS C:\> [MyClass]::new($strArr)
2 strarr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...