【问题标题】:Making a List<T> of a type created via Add-Type -TypeDefinition in powershell在 powershell 中创建通过 Add-Type -TypeDefinition 创建的类型的 List<T>
【发布时间】:2011-09-07 16:18:03
【问题描述】:

我有一个类,我在 powershell 的内联 C# 中定义:

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= 新对象 SomeClass -Property @{ '姓名' = "贾斯汀·迪林"; "A" = 1; "B" = 5; };

但我无法实例化它的列表:

$listOfClasses = 新对象 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

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    PowerShell 似乎不直接支持。这里是a solution,它提供了一个New-GenericObject 脚本;这会进行一些反思以创建正确的类型。

    【讨论】:

    • 我最终解决了这个问题,但将来会使用它。
    【解决方案2】:

    一种解决方案是在 SomeClass 定义中简单地创建一个 List 工厂,如下所示:

    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();这样实例化一个列表

    【讨论】:

    • 这是一个答案,而不是澄清。虽然我认为它不是最好的答案(因此我没有将其标记为正确),但它是我问题的答案,所以我把它放在答案中。 Jeff 和 Joel 多次表示可以回答您自己的问题。
    • 回答你自己的问题没关系,否则我会标记这个。我是说这不是确切的解决方案,应该作为可能的替代方案作为问题的一部分,但它不能回答一般问题,因为它仅在您添加类型的特定情况下才是替代方案你可以控制它。
    【解决方案3】:

    【讨论】:

    • 与@driis 的回答相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多