“无法使用提供的参数构造Closed Type”在Powershell中创建通用列表时出错

时间:2011-11-04 02:59:24

标签: powershell

我有一个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的基本功能很好。有没有人对这个错误意味着什么以及如何解决这个问题有所了解?

2 个答案:

答案 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)
}