gpt4 book ai didi

PowerShell 函数不会返回对象

转载 作者:行者123 更新时间:2023-12-04 22:37:43 25 4
gpt4 key购买 nike

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

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 .

更多信息

以下是类似问题的列表,可帮助您了解正在发生的事情:
  • Powershell pitfalls
  • Avoiding Agnostic Jagged Array Flattening in Powershell
  • Strange behavior in PowerShell function returning DataSet/DataTable
  • What determines whether the Powershell pipeline will unroll a collection?


  • 注意:您不需要用括号声明函数头。如果需要添加参数,函数将如下所示:
    function test {
    param($myParameter, $myParameter2)
    }

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

    关于PowerShell 函数不会返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961075/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com