Являются ли массивы PowerShell просто .NET-массивами? - PullRequest
5 голосов
/ 27 августа 2009

Я создаю массив строковых объектов в PowerShell , который необходимо передать в Xceed метод библиотеки zip, который ожидает строку [], но я получаю ошибку каждый раз. Это заставляет меня задуматься о том, является ли массив PowerShell чем-то отличным от массива .NET. Вот некоторый код:

$string_list = @()
foreach($f in $file_list)
{
    $string_list += $f.FullName
}
[Xceed.Zip.QuickZip]::Zip("C:\new.zip", $true, $false, $false, $string_list)

Я получаю сообщение об ошибке «Произошла ошибка при добавлении файлов в zip-файл». Если я жестко кодирую в таких значениях, это работает:

[Xceed.Zip.QuickZip]::Zip("C:\new.zip", $true, $false, $false, "test.txt", "test2.txt", "test3.txt")

Может кто-нибудь помочь мне понять это? Я не могу понять, в чем разница ...

РЕДАКТИРОВАТЬ: я проверил и подтвердил, что мой массив $ string_list состоит из объектов System.String

1 Ответ

16 голосов
/ 27 августа 2009

Когда вы указываете:

$string_list = @()

Вы указали PowerShell без информации о типе, поэтому он создает массив System.Object, который может содержать любой объект:

PS> ,$string_list | Get-Member

   TypeName: System.Object[]

Попробуйте указать конкретный тип массива (строковый массив) следующим образом:

PS> [string[]]$string_list = @()
PS> ,$string_list | Get-Member


   TypeName: System.String[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...