PowerShell version 5引入了Class
关键字,可以更轻松地在PowerShell中创建自定义类。该公告仅提供a brief summary on properties:
所有属性都是公开的。属性需要换行符或分号。如果未指定对象类型,则属性类型为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:\Scripts\Test.ps1:4 char:36
+ [System.Collections.Generic.List<Node>]$Nodes
+ ~
Missing ] at end of attribute or type literal.
At D:\Scripts\Test.ps1:4 char:37
+ [System.Collections.Generic.List<Node>]$Nodes
+ ~
Missing a property name or method definition.
At D:\Scripts\Test.ps1:4 char:5
+ [System.Collections.Generic.List<Node>]$Nodes
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Missing closing '}' in statement block or type definition.
At D:\Scripts\Test.ps1:5 char:1
+ }
+ ~
Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EndSquareBracketExpectedAtEndOfAttribute
这让我想到如何在PowerShell 5中为属性使用泛型类型?
答案 0 :(得分:4)
在制作我的问题时,我偶然发现answer which details how to create Dictionary
objects in PowerShell 2:
$object = New-Object 'system.collections.generic.dictionary[string,int]'
特别值得注意的是,使用<
和>
而不是使用[
和]
进行通用声明。切换我的班级声明以使用square brackets代替angle brackets解决了我的问题:
Class Node
{
[String]$Label
[System.Collections.Generic.List[Node]]$Nodes
}