Bellow是一个声明OutputType
的示例函数。
我了解这仅是出于文档目的,但是这里的问题是当我调用PSScriptAnalyzer时:
invoke-scriptanalyzer . -IncludeRule PSUseOutputTypeCorrectly
它会告诉我:
function Test-Function
{
[CmdletBinding()]
[OutputType([System.Management.Automation.PSCustomObject[]])]
param ()
[PSCustomObject[]] $TestObject = @()
for ($i = 0; $i -lt 5; $i++)
{
$TestObject += [PSCustomObject]@{
Key1 = "Value1"
Key2 = "Value2"
}
}
return $TestObject
}
问题是我怀疑此引用消息是误报,但无法确认。
我认为我宣布了
OutputType
属性就好了,或者也许不行?为什么需要将
[OutputType([System.Object[]])]
指定为输出类型?如果我要返回PSCustomObject[]
? 最佳答案
除非另有说明,否则您从函数中获取的return
都会由管道枚举,因此,例如,当您将任何内容分配给变量时,您的[psobject[]]
将被“解包”并塞回到动态大小的[object[]]
中。
如果要按原样返回可枚举的集合,请使用Write-Output -NoEnumerate
:
function Test-Function
{
[CmdletBinding()]
[OutputType([System.Management.Automation.PSCustomObject[]])]
param ()
[PSCustomObject[]] $TestObject = @()
for ($i = 0; $i -lt 5; $i++)
{
$TestObject += [PSCustomObject]@{
Key1 = "Value1"
Key2 = "Value2"
}
}
Write-Output $TestObject -NoEnumerate
}