PowerShell-Beschleuniger: PSObject vs PSCustomObject
In PowerShell v3.0PSCustomObject
wurde vorgestellt. Es ist wiePSObject
, aber besser. Neben anderen Verbesserungen (z. B. die Beibehaltung der Eigenschaftsreihenfolge) wird das Erstellen von Objekten aus Hashtabellen vereinfacht:
[PSCustomObject]@{one=1; two=2;}
Nun scheint es offensichtlich, dass diese Aussage:
[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
würde genauso funktionieren, weilPSCustomObject
ist ein "Alias" für vollständigen Namespace + Klassenname. Stattdessen erhalte ich eine Fehlermeldung:
Kann den Wert "System.Collections.Hashtable" vom Typ "System.Collections.Hashtable" nicht in "System.Management.Automation.PSCustomObject" konvertieren.
Ich habe die Beschleuniger für beide Objekttypen aufgelistet:
[accelerators]::get.GetEnumerator() | where key -Like ps*object
Key Value
--- -----
psobject System.Management.Automation.PSObject
pscustomobject System.Management.Automation.PSObject
und entdeckte, dass beide auf dasselbe @ verweisPSObject
class - das muss bedeuten, dass die Verwendung von Beschleunigern eine Menge anderer Dinge bewirken kann, als nur den Code zu verkürzen.
Meine Fragen zu diesem Problem lauten:
Haben Sie einige interessante Beispiele für Unterschiede zwischen der Verwendung eines Beschleunigers und der Verwendung des vollständigen Typnamens? Sollte die Verwendung des vollständigen Typnamens vermieden werden, wenn ein Beschleuniger als allgemeine Best Practice verfügbar ist?Wie kann man mithilfe von Reflektion überprüfen, ob ein Beschleuniger andere Aufgaben ausführt, als nur auf die zugrunde liegende Klasse zu zeigen?