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
问题是,$a无论我尝试什么,它总是为空.如果我在函数之外执行相同的代码,它可以正常工作.  
思考?
恕我直言,陷阱#1.如果从函数中返回一个以某种方式可枚举的对象(我不确切知道实现IEnumerable是否是唯一的情况),PowerShell将展开该对象并返回其中的项目.
您新创建的列表为空,因此未返回任何内容.为了使它工作只需使用:
,[Activator]::CreateInstance($closedType)
这将使得一个项目数组被展开并且项目(通用列表)被分配给$a.
更多信息
以下是类似问题的列表,可帮助您了解正在发生的事情:
注意:您不需要使用括号声明函数头.如果需要添加参数,该函数将如下所示:
function test {
 param($myParameter, $myParameter2)
}
要么
function  {
param(
  [Parameter(Mandatory=true, Position=0)]$myParameter,
  ... again $myParameter2)
...