如果数组只有一个CustomObjects且Count属性为null。的为什么吗
如果仅使用字符串,则Count属性为1。
function MyFunction
{
$Objects = @()
$Objects += [pscustomobject]@{Label = "Hallo"}
# $Objects += [pscustomobject]@{Label = "World"}
$Objects
}
$objs = MyFunction
Write-Host "Count: $($objs.Count)"
输出:"Count: "
因为$objs.Count
是null
function MyFunction
{
$Objects = @()
$Objects += [pscustomobject]@{Label = "Hallo"}
$Objects += [pscustomobject]@{Label = "World"}
$Objects
}
$objs = MyFunction
Write-Host "Count: $($objs.Count)"
输出:"Count: 2"
如果我添加字符串,行为会有所不同
function MyFunction
{
$Objects = @()
$Objects += "Hallo"
# $Objects += [pscustomobject]@{Label = "World"}
$Objects
}
$objs = MyFunction
Write-Host "Count: $($objs.Count)"
输出:"Count: 1"
答案 0 :(得分:3)
即使嵌套数组由一个对象构成,也可以强制该函数返回一个数组。
function MyFunction
{
$Objects = @()
$Objects += [pscustomobject]@{Label = "Hallo"}
# $Objects += [pscustomobject]@{Label = "World"}
return ,$Objects
}
即使提供的$Objects
已经是一个包含多个对象的数组,该逗号也会显式转换为数组。这会强制构造具有一个元素的数组。在外面,Powershell会对一项数组进行unboxing,所以如果有一个数组,你将得到一个数组,所以这个方法适用于使用单项数组的默认Powershell行为。您体验Count
为1,因为在Powershell 3.0 Microsoft fixed one-item arrays by adding Count
property to every object中,一个对象的索引返回Count
为1,而$null
返回零,但{{1}由于自然原因声明它们可以包含自己的PSCustomObject
属性,因此不包含自定义对象的默认Count
属性。这就是为什么如果只有一个对象,你就不会得到Count
。
Count
的行为可以在以下示例中看到:
,
输出:
PS K:> (合).Count之间的
VERBOSE:1
2