在PowerShell中,您可以使用方括号指定类型:
PS C:\Users\zippy> [int]
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
还有内置类型加速器,如[xml],当您希望将某些内容转换为XmlDocument时,可以节省一些按键。
PS C:\Users\zippy> [xml]
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False XmlDocument System.Xml.XmlNode
您可以通过以下两个命令之一生成列表:
[type]::gettype("System.Management.Automation.TypeAccelerators")::Get
[psobject].assembly.gettype("System.Management.Automation.TypeAccelerators")::Get
PowerShell 3.0添加了一个名为[ordered]的运算符。它不是一个类型别名。
PS C:\Users\zippy> [ordered]
Unable to find type [ordered]: make sure that the assembly containing this type is loaded.
At line:1 char:1
+ [ordered]
+ ~~~~~~~~~
+ CategoryInfo : InvalidOperation: (ordered:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
但是,它可以将Hashtable转换为OrderedDictionary s。
PS C:\Users\zippy> ([ordered]@{}).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True OrderedDictionary System.Object
所以我的问题是,如果[ordered]不是类型加速器,它是什么?
答案 0 :(得分:3)
不幸的是[ordered]
有点像样。它既不是类型也不是加速器。它只存在于解析器中,并被视为如何创建哈希表的提示(即不使用哈希表,而是使用ordereddictionary。)将其视为.net属性,除非它不是:D
答案 1 :(得分:0)
使用以下命令:
Trace-Command -Name TypeConversion -Expression {([ordered]@{}).gettype()} -PSHost
让我想象一下,解释器尝试匹配递归类型的加载程序集并完成匹配OrderedDictionary,这只是一个假设。