33

鉴于这有效:

$ar = @()
$ar -is [Array]
  True

为什么这不起作用?

function test {
    $arr = @()
    return $arr
}

$ar = test
$ar -is [Array]
  False

也就是说,为什么测试函数没有返回一个空数组?

4

2 回答 2

39

您的函数不起作用,因为 PowerShell 返回所有未捕获的流输出,而不仅仅是return语句的参数。在这个过程中,一个空数组被破坏$null了。但是,您可以通过在数组构造运算符( ) 前添加数组来保留返回的数组,

function test {
  $arr = @()
  return ,$arr
}
于 2013-08-27T23:19:44.190 回答
0

write-output $arr就像只是写作一样$arr。所以函数仍然会返回$null

write-output有选择-NoEnumerate。这意味着不会枚举空数组(因此被忽略 - 因为它是空的)。结果是一个空数组。

诚然,上述答案要短得多,...

 function test {
     $arr = @()
     write-output $arr -NoEnumerate 
 }
 (test) -is [array]  ## $True
于 2020-06-26T17:57:18.500 回答