gpt4 book ai didi

PowerShell类型加速器: PSObject vs PSCustomObject

转载 作者:行者123 更新时间:2023-12-03 07:01:52 24 4
gpt4 key购买 nike

在 PowerShell v3.0 中引入了 PSCustomObject。它类似于 PSObject,但更好。除了其他改进(例如保留属性顺序)之外,还简化了从哈希表创建对象的过程:

[PSCustomObject]@{one=1; two=2;}

现在看来这个声明很明显:

[System.Management.Automation.PSCustomObject]@{one=1; two=2;}

会以同样的方式工作,因为PSCustomObject是完整命名空间+类名的“别名”。相反,我收到一个错误:

Cannot convert the "System.Collections.Hashtable" value of type "System.Collections.Hashtable" to type "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 类 - 这意味着使用加速器可以做很多其他事情,而不仅仅是缩短代码。

我对这个问题的疑问是:

  1. 对于使用加速器与使用完整类型名称之间的差异,您有一些有趣的示例吗?
  2. 只要有加速器可用,就应该避免使用完整类型名称作为一般最佳实践吗?
  3. 如何检查(可能使用反射)加速器是否执行其他操作而不仅仅是指向底层类?

最佳答案

查看静态方法:

PS C:\> [PSCustomObject] | gm -Static -MemberType Method



TypeName: System.Management.Automation.PSObject

Name MemberType Definition
---- ---------- ----------
AsPSObject Method static psobject AsPSObject(System.Object obj)
Equals Method static bool Equals(System.Object objA, System.Object objB)
new Method psobject new(), psobject new(System.Object obj)
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object o...



PS C:\> [System.Management.Automation.PSCustomObject] | gm -Static -MemberType Method



TypeName: System.Management.Automation.PSCustomObject

Name MemberType Definition
---- ---------- ----------
Equals Method static bool Equals(System.Object objA, System.Object objB)
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object o...

类型加速器添加了几个新的静态方法。我怀疑它使用其中之一作为构造函数。

关于PowerShell类型加速器: PSObject vs PSCustomObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35894272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com