Ошибка «Не удалось создать закрытый тип с использованием предоставленных аргументов» при создании общего списка в Powershell - PullRequest
1 голос
/ 04 ноября 2011

У меня есть сценарий 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 ]

2 голосов
/ 04 ноября 2011

Можете ли вы попробовать это вместо этого:

$list = new-object 'collections.generic.list[my.namespace.myclass]'

Кстати, какую версию powershell вы используете?какая операционная система?

Обновление

Это может быть длительной ошибкой, когда тип элемента находится в сборке стороннего производителя, а коллекция не в той же сборке, вы должны полностью определить тип элемента.Попробуйте это:

$list = new-object ("collections.generic.list[[{0}]]" `
    -f [MyClass].AssemblyQualifiedName)
1 голос
/ 22 ноября 2011

Мне не очень нравится это решение, но это единственное, что я нашел для работы:

function CreateGenericList
{
    $dummy = New-Object My.Namespace.MyClass
    $generic = [System.Collections.Generic.List``1]
    $gt = $generic.MakeGenericType(@($dummy.GetType()))
    ,[Activator]::CreateInstance($gt)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...