PowerShell函数不会返回对象

Dan*_*Dan 4 powershell return object

我有一个简单的函数,可以创建一个通用List:

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

$a = test
Run Code Online (Sandbox Code Playgroud)

问题是,$a无论我尝试什么,它总是为空.如果我在函数之外执行相同的代码,它可以正常工作.

思考?

ste*_*tej 8

恕我直言,陷阱#1.如果从函数中返回一个以某种方式可枚举的对象(我不确切知道实现IEnumerable是否是唯一的情况),PowerShell将展开该对象并返回其中的项目.

您新创建的列表为空,因此未返回任何内容.为了使它工作只需使用:

,[Activator]::CreateInstance($closedType)
Run Code Online (Sandbox Code Playgroud)

这将使得一个项目数组被展开并且项目(通用列表)被分配给$a.

更多信息

以下是类似问题的列表,可帮助您了解正在发生的事情:


注意:您不需要使用括号声明函数头.如果需要添加参数,该函数将如下所示:

function test {
 param($myParameter, $myParameter2)
}
Run Code Online (Sandbox Code Playgroud)

要么

function  {
param(
  [Parameter(Mandatory=true, Position=0)]$myParameter,
  ... again $myParameter2)
...
Run Code Online (Sandbox Code Playgroud)