PowerShell函数不会返回对象

时间:2010-06-02 19:46:14

标签: powershell object return

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

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

$a = test

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

思想?

2 个答案:

答案 0 :(得分:8)

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

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

,[Activator]::CreateInstance($closedType)

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

更多信息

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


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

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

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

答案 1 :(得分:3)

使用泛型的简便方法。这并不能直接解决[Activator]方法

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

(test).gettype()