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
}