Функция PowerShell не возвращает объект

У меня есть простая функция, которая создает общий список:

function test()
{
    $genericType = [Type] "System.Collections.Generic.List``1"
    [type[]] $typedParameters = ,"System.String"
    $closedType = $genericType.MakeGenericType($typedParameters)
    [Activator]::CreateInstance($closedType)
}

$a = test

Проблема в том, что $a всегда равно нулю, что бы я ни пытался. Если я выполняю тот же код за пределами функции, он работает правильно.

Мысли?

2 ответа

Решение

ИМХО, это подводный камень #1. Если вы возвращаете объект из функции, которая как-то перечислима (я не знаю точно, если реализация IEnumerable является единственным случаем), PowerShell разворачивает объект и возвращает элементы в нем.

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

,[Activator]::CreateInstance($closedType)

Это создаст массив из одного элемента, который будет развернут, и элемент (общий список) будет назначен $a,

Дальнейшая информация

Вот список похожих вопросов, которые помогут вам понять, что происходит:


Примечание: вам не нужно объявлять заголовок функции с круглыми скобками. Если вам нужно добавить параметры, функция будет выглядеть так:

function test {
 param($myParameter, $myParameter2)
}

или же

function  {
param(
  [Parameter(Mandatory=true, Position=0)]$myParameter,
  ... again $myParameter2)
...

Более простой способ работы с дженериками. Это напрямую не решает подход [Activator], хотя

Function test
{
    New-Object "system.collections.generic.list[string]"
}

(test).gettype()
Другие вопросы по тегам