Создание списка <T>типа, созданного с помощью Add-Type -TypeDefinition в powershell - PullRequest
2 голосов
/ 07 сентября 2011

У меня есть класс, который я определяю во встроенном C # в powershell:

Add-Type -TypeDefinition @"
    public class SomeClass {
        string name;
        public string Name { get { return name; } set { name = value; } }
        int a, b;
        public int A { get { return a; } set { a = value; } }
        public int B { get { return b; } set { b = value; } }
    }
"@

Я могу создать его экземпляр: $ someClass = New-Object SomeClass -Property @ {'Name' = "Justin Dearing";«А» = 1;"B" = 5;};

Но я не могу создать его список:

$ listOfClasses = New-Object System.Collections.Generic.List [SomeClass];

При этом я получаю следующее:

New-Object : Cannot find type [[System.Collections.Generic[SomeClass]]]: make sure the assembly containing this type is loaded.
At line:12 char:28
+ $listOfClasses = New-Object <<<<  [System.Collections.Generic[SomeClass]]
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Кажется, что напрямую не поддерживается в PowerShell.Вот решение , которое предоставляет скрипт New-GenericObject;что делает некоторое отражение, чтобы создать правильный тип.

0 голосов
/ 07 сентября 2011
0 голосов
/ 07 сентября 2011

Одним из решений является простое создание фабрики List в определении SomeClass следующим образом:

Add-Type -TypeDefinition @"
    using System.Collections.Generic;

    public class SomeClass {
        string name;
        public string Name { get { return name; } set { name = value; } }
        int a, b;
        public int A { get { return a; } set { a = value; } }
        public int B { get { return b; } set { b = value; } }

        public static List<SomeClass> CreateList () { return new List<SomeClass>(); }
    }
"@

Затем вы можете создать экземпляр списка, например $listOfClasses = [SomeClass]::CreateList();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...