PowerShell v3.0引入了PSCustomObject
。它类似于PSObject
,但更好。除了其他改进(例如属性顺序被保留),从哈希表创建对象变得更加简单:
[PSCustomObject]@{one=1; two=2;}
现在看来,这个声明是显而易见的:[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
会以相同的方式工作,因为PSCustomObject
是完整命名空间+类名称的“别名”。但我收到了一个错误:
无法将类型为“System.Collections.Hashtable”的值“System.Collections.Hashtable”转换为类型“System.Management.Automation.PSCustomObject”。
我列出了两种对象类型的加速器:
[accelerators]::get.GetEnumerator() | where key -Like ps*object
Key Value
--- -----
psobject System.Management.Automation.PSObject
pscustomobject System.Management.Automation.PSObject
并且发现两者都引用了同一个PSObject
类——这意味着使用加速器可以做很多其他事情,而不仅仅是缩短代码。
我对此问题的疑问是:
- 您有一些有趣的示例,说明使用加速器与使用完整类型名称之间的差异吗?
- 在可用加速器的情况下,是否应该避免使用完整类型名称作为通用最佳实践?
- 如何检查(可能使用反射),以确定加速器除了指向底层类之外还执行其他操作?
System.Management.Automation.Language.Compiler.VisitConvertExpression
,你会发现有三个类型名称有特殊处理:ordered
、PSCustomObject
和ref
。请注意,本文仅为翻译内容,不涉及任何解释。 - user4003407