我有一个创建通用List的简单函数:
function test()
{
$genericType = [Type] "System.Collections.Generic.List``1"
[type[]] $typedParameters = ,"System.String"
$closedType = $genericType.MakeGenericType($typedParameters)
[Activator]::CreateInstance($closedType)
}
$a = test
问题在于,无论我尝试什么,$a
始终为空。如果我在函数之外执行相同的代码,它可以正常工作。
思想?
答案 0 :(得分:8)
恕我直言,这是陷阱#1。如果从函数中返回一个以某种方式可枚举的对象(我不确切知道实现IEnumerable
是否是唯一的情况),PowerShell将展开该对象并返回其中的项。
您新创建的列表为空,因此未返回任何内容。为了使它工作,只需使用:
,[Activator]::CreateInstance($closedType)
这将使一个项目数组展开,并将项目(通用列表)分配给$a
。
更多信息
以下是类似问题的列表,可帮助您了解正在发生的事情:
注意:您不需要用括号声明函数头。如果需要添加参数,该函数将如下所示:
function test {
param($myParameter, $myParameter2)
}
或
function {
param(
[Parameter(Mandatory=true, Position=0)]$myParameter,
... again $myParameter2)
...
答案 1 :(得分:3)
使用泛型的简便方法。这并不能直接解决[Activator]方法
Function test
{
New-Object "system.collections.generic.list[string]"
}
(test).gettype()