我正在尝试返回List< T>来自PowerShell函数,但得到以下之一:
代码:
function CreateClrList
{
$list = New-Object "System.Collections.Generic.List``1[System.Int32]"
$list.Add(3)
$list
}
Write-Host (CreateClrList).GetType()
答案 0 :(得分:9)
是的,powershell展开所有收藏品。一种解决方案是使用一元逗号返回包含真实集合的集合:
function CreateClrList
{
$list = New-Object "System.Collections.Generic.List``1[System.Int32]"
$list.Add(3)
,$list
}
答案 1 :(得分:1)
请注意,大多数情况下,您希望 Powershell展开可枚举类型,以便管道命令执行得更快并且具有更早的用户反馈,因为管道下的命令可以开始处理第一项并提供输出
答案 2 :(得分:0)
如果您需要返回整数列表,请使用jachymko's solution。
否则,如果你不特别在意你得到的是列表或数组,只想迭代结果,你可以在枚举时将结果包装在@()中,例如
$fooList = CreateClrList
foreach ($foo in @($fooList))
{
...
}
这会导致@($fooList)
为数组类型 - 空数组,包含一个元素的数组或包含多个元素的数组。
答案 3 :(得分:0)
PowerShell 5.0添加了对类的支持,因此增加了可以指定返回类型的方法。要控制返回的类型,请使用带有静态方法的类:
class ListManager {
static [System.Collections.Generic.List[int]] Create() {
[System.Collections.Generic.List[int]] $list =
[System.Collections.Generic.List[int]]::new()
$list.Add(3)
return $list
}
}
[ListManager]::Create().GetType()