Powershell ArrayList中的Null元素导致';无法将参数绑定到参数';错误 问题
在下面的代码(PowerShell v2)中调用函数Powershell ArrayList中的Null元素导致';无法将参数绑定到参数';错误 问题,powershell,arraylist,parameters,null,powershell-2.0,Powershell,Arraylist,Parameters,Null,Powershell 2.0,在下面的代码(PowerShell v2)中调用函数f$array时,我收到一个错误: f:无法将参数绑定到参数“csvObject1”,因为它为空 我的代码 问题: Powershell为什么要这样做?这对我来说是一个设计缺陷,但也许我没有看到大局 评论 我认为发生此错误是因为ArrayList中的第二行是$null。我对这一“发现”略感震惊,因为: 我花了大约4个小时才找到这个问题 这意味着在函数中使用强类型定义是一个坏主意,因为它会导致PowerShell检查数组中的每个元素,这是一个无法
f$array
时,我收到一个错误:
f:无法将参数绑定到参数“csvObject1”,因为它为空
我的代码
问题:
Powershell为什么要这样做?这对我来说是一个设计缺陷,但也许我没有看到大局
评论
我认为发生此错误是因为ArrayList
中的第二行是$null
。我对这一“发现”略感震惊,因为:
[System.Collections.ArrayList]
,问题就会消失不确定为什么PowerShell会生成异常,因为null是ArrayList的有效成员。但是,可以通过允许空值来强制参数验证 像这样:
[parameter(Position=0, Mandatory=$true)][AllowNull()][System.Collections.ArrayList] $array
然后不会生成异常。您应该使用中所述的
AllowNullAttribute
这是一种防御性编程。PS在管道化时自动展开阵列和HASTABLE。全局考虑—当您将一堆服务器名称传递给其他服务器时,您不希望在其他服务器名称列表中出现空的服务器名称。谢谢。以上两个答案都很好。来自Java和.NET的背景,我花了一段时间才习惯这种“自动展开”。我真的不喜欢在返回值上使用神奇的逗号。我已经开始将参数传递到函数中,并使用PSObject上的属性从函数中返回值。它的开销稍大一些,但至少我得到了可预测的结果。
[parameter(Position=0, Mandatory=$true)][AllowNull()][System.Collections.ArrayList] $array
Param
(
[Parameter(Position=0, Mandatory=$true)]
[AllowNull()]
[System.Collections.ArrayList]$array
)