You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本块返回List对象时异常得到NULL是什么原因

问题根因

这是PowerShell的默认管道枚举规则导致的:PowerShell处理命令/脚本块的返回值时,会自动枚举所有实现了System.Collections.IEnumerable接口的对象,把集合内的元素逐个输出到管道,而非将集合本身作为单个对象返回。
你示例中创建的空[System.Collections.Generic.List[object]]属于实现了IEnumerable的集合类型,空集合枚举后没有任何元素输出,因此$r1最终被赋值为$null。而字符串类型没有实现IEnumerable接口,会直接作为完整对象返回,因此s2的运行结果符合预期。

修复方案

如果需要返回完整的集合对象、避免被PowerShell自动枚举,可使用以下两种常用方案:

  • 方案1:在返回的集合前添加一元逗号操作符,,将集合包裹为单元素数组,PowerShell枚举外层数组后即可得到完整的集合对象
    修正后代码示例:
    $s1 = {
        param($string);
        $list = [System.Collections.Generic.List[object]]::new();
        return ,$list; 
    }
    
  • 方案2:使用Write-Output命令的-NoEnumerate参数,显式禁止枚举集合
    修正后代码示例:
    $s1 = {
        param($string);
        $list = [System.Collections.Generic.List[object]]::new();
        Write-Output $list -NoEnumerate
    }
    

修改后重新运行代码,$r1就会返回你预期的List对象,$null -eq $r1的结果会变为False。

内容的提问来源于stack exchange,提问作者n247s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:24:01