我有一个Powershell脚本,我想创建一个在自定义(C ++ / CLI)程序集中定义的类型的通用列表。
如果我运行new-object My.Namespace.MyClass
,我可以整天创建对象。但是,如果我运行new-genericobject System.Collections.Generic.List -Of My.Namespace.MyClass
,我会收到以下错误:
New-GenericObject : Could not construct Closed Type using the provided arguments.
At line:1 char:18
+ new-genericobject <<<< System.Collections.Generic.List -Of My.Namespace.MyClass
+ CategoryInfo : NotSpecified: (:) [New-GenericObject], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Pscx.Commands.NewGenericObjectCommand
我可以创建字符串列表,因此new-genericobject的基本功能很好。有没有人对这个错误意味着什么以及如何解决这个问题有所了解?
答案 0 :(得分:2)
你可以试试这个:
$list = new-object 'collections.generic.list[my.namespace.myclass]'
顺便问一下,您使用的是哪个版本的powershell?什么操作系统?
<强>更新强>
这可能是一个长期运行的错误,如果元素类型在第三方程序集中且集合不在同一程序集中,则必须完全限定元素类型。试试这个:
$list = new-object ("collections.generic.list[[{0}]]" `
-f [MyClass].AssemblyQualifiedName)
答案 1 :(得分:1)
我真的不喜欢这个解决方案,但这是我发现的唯一工作方式:
function CreateGenericList
{
$dummy = New-Object My.Namespace.MyClass
$generic = [System.Collections.Generic.List``1]
$gt = $generic.MakeGenericType(@($dummy.GetType()))
,[Activator]::CreateInstance($gt)
}