在 PowerShell v3.0PSCustomObject
中引入。有点像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
类——这意味着使用加速器可以做很多其他的事情,而不仅仅是让代码更短。
我关于这个问题的问题是:
- 您是否有一些有趣的例子来说明使用加速器与使用完整类型名称之间的差异?
- 当加速器作为一般最佳实践可用时,是否应该避免使用完整的类型名称?
- 如果加速器不仅仅指向底层类,如何检查,也许使用反射?