在PowerShell 5中,可以为一个类声明通用属性吗?



PowerShell版本5引入了Class关键字,使得在PowerShell中创建自定义类更容易。该公告只提供了关于属性的简要摘要:

所有属性都是公共的。属性需要换行符或分号。如果没有指定对象类型,则属性类型为object。

到目前为止一切顺利。这意味着我可以很容易地创建一个像这样的类:

Class Node
{
    [String]$Label
    $Nodes
}

我遇到的问题是,通过不指定$Nodes的类型,它默认为System.Object。我的目标是使用System.Collections.Generic.List类型,但到目前为止还没有弄清楚如何做到这一点。

Class Node
{
    [String]$Label
    [System.Collections.Generic.List<Node>]$Nodes
}

以上导致了一连串的问题:

At D:ScriptsTest.ps1:4 char:36
+     [System.Collections.Generic.List<Node>]$Nodes
+                                    ~
Missing ] at end of attribute or type literal.
At D:ScriptsTest.ps1:4 char:37
+     [System.Collections.Generic.List<Node>]$Nodes
+                                     ~
Missing a property name or method definition.
At D:ScriptsTest.ps1:4 char:5
+     [System.Collections.Generic.List<Node>]$Nodes
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Missing closing '}' in statement block or type definition.
At D:ScriptsTest.ps1:5 char:1
+ }
+ ~
Unexpected token '}' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : EndSquareBracketExpectedAtEndOfAttribute

这导致我的问题,我如何利用一个泛型类型的属性在PowerShell 5?

在制作我的问题时,我偶然发现了一个详细说明如何在PowerShell 2中创建Dictionary对象的答案:

$object = New-Object 'system.collections.generic.dictionary[string,int]'

特别值得注意的是,没有使用<>来进行泛型声明,而是使用[]。将我的类声明改为使用方括号而不是尖括号解决了我的问题:

Class Node
{
    [String]$Label
    [System.Collections.Generic.List[Node]]$Nodes
}

相关内容

  • 没有找到相关文章

最新更新