In PowerShell v3.0 wurde PSCustomObject
eingeführt. Es ist wie PSObject
, aber besser. Neben anderen Verbesserungen (zB Eigentumsordnung erhalten bleibt), Objekt von hashtable Erstellung vereinfacht:PowerShell-Typ Beschleuniger: PSObject vs PSCustomObject
[PSCustomObject]@{one=1; two=2;}
Nun scheint es offensichtlich, dass diese Aussage:
[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
würde die gleiche Art und Weise arbeiten, weil PSCustomObject
eine ist "Alias" für vollständigen Namespace + Klassennamen. Stattdessen ich eine Fehlermeldung erhalten:
Cannot convert the "System.Collections.Hashtable" value of type "System.Collections.Hashtable" to type "System.Management.Automation.PSCustomObject".
I aufgeführten Beschleuniger für beide Arten von Objekten:
[accelerators]::get.GetEnumerator() | where key -Like ps*object
Key Value
--- -----
psobject System.Management.Automation.PSObject
pscustomobject System.Management.Automation.PSObject
und entdeckt, dass beide die gleiche PSObject
Klasse verweisen - dies hat bedeuten, dass Beschleuniger mit einem Bündel tun können von anderen Sachen als nur den Code kürzer zu machen.
Meine Fragen zu diesem Thema sind:
- Haben Sie zwischen der Verwendung eines Beschleunigers vs mit vollständigen Typnamen einige interessante examaples Unterschiede haben?
- Soll der vollständige Typname vermieden werden, wenn ein Beschleuniger als allgemeine Best Practice verfügbar ist?
- Wie überprüfen, vielleicht mit Reflektion, wenn ein Beschleuniger andere Dinge tut als nur auf die zugrunde liegende Klasse zu zeigen?
Wenn Sie 'System.Management.Automation.Language.Compiler dekompilieren.VisitConvertExpression', dann können Sie sehen, dass es eine spezielle Behandlung für drei Typennamen gibt: 'ordered',' PSCustomObject' und 'ref'. – PetSerAl