Как я могу вернуть байтовый массив (а не массив объектов) из функции PowerShell - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь создать функцию, которая возвращает байтовый массив ([Byte[]]).

Однако, когда я использую функцию и присваиваю возвращаемое значение переменной, тип переменной массив объектов ([Object[]]).

function make-byteArray() {
  [OutputType([Byte[]])]

   [byte[]] $byteArray = new-object byte[] 2
   $byteArray[0] = 0
   $byteArray[1] = 1

   write-host "type of byteArray: $($byteArray.GetType().FullName)"

   return $byteArray
}

$x = make-byteArray
write-host "type of x: $($x.GetType().FullName)"

Я удивлен, почему это так, и хотел бы знать, что я могу сделать, чтобы заставить функцию возвращать байтовый массив.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Вы можете использовать Write-Output Вместо return:

Write-Output $bytearray -NoEnumerate

Оператор Return всегда распаковывает возвращаемый объект, поэтому он получает тип System.Object []

1 голос
/ 26 апреля 2020

Просто добавьте одинарную запятую , перед возвращенным $byteArray следующим образом:

return ,$byteArray

Return:

type of byteArray: System.Byte[]
type of x: System.Byte[]

Это обернет возвращенный массив внутри другого одноэлементного массива. Когда массив возвращается из функции, PowerShell «развертывает» это, и в этом случае он развертывает массив-оболочку, оставляя байтовый массив внутри.

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