【问题标题】:PowerShell function won't return objectPowerShell 函数不会返回对象
【发布时间】:2011-02-27 00:18:10
【问题描述】:

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

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

$a = test

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

想法?

【问题讨论】:

    标签: powershell object return


    【解决方案1】:

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

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

    ,[Activator]::CreateInstance($closedType)
    

    这将创建一个展开的单项数组,并将该项(通用列表)分配给$a

    更多信息

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


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

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

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

    【讨论】:

    • 逗号!哦。谢谢,这些天我会做对的。
    【解决方案2】:

    使用泛型的更简单方法。虽然这并没有直接解决 [Activator] 方法

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2021-05-28
      • 2010-11-07
      • 1970-01-01
      相关资源
      最近更新 更多