In PowerShell v3.0 PSCustomObject
è stato introdotto. È come PSObject
, ma meglio. Tra gli altri miglioramenti (ad esempio, ordine proprietà di essere conservato), la creazione di oggetto dalla tabella hash è semplificata:Acceleratori di tipo PowerShell: PSObject vs PSCustomObject
[PSCustomObject]@{one=1; two=2;}
ora sembra ovvio che questa dichiarazione:
[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
funzionerebbe allo stesso modo, perché PSCustomObject
è un "alias" per spazio dei nomi completo + nome classe. Invece ottengo un errore:
Cannot convert the "System.Collections.Hashtable" value of type "System.Collections.Hashtable" to type "System.Management.Automation.PSCustomObject".
ho elencato acceleratori per entrambi i tipi di oggetti:
[accelerators]::get.GetEnumerator() | where key -Like ps*object
Key Value
--- -----
psobject System.Management.Automation.PSObject
pscustomobject System.Management.Automation.PSObject
e ha scoperto che entrambi riferimento allo stesso PSObject
classe - questo deve significare che l'uso di acceleratori può fare un mucchio di altre cose oltre a rendere il codice più breve.
Le mie domande per quanto riguarda questo problema sono:
- Vuoi inserire altri examaples interessanti differenze tra l'utilizzo di un acceleratore vs utilizzando il nome completo di tipo?
- È necessario evitare l'uso del nome completo quando è disponibile un acceleratore come procedura consigliata generale?
- Come verificare, magari utilizzando la riflessione, se un acceleratore fa altro che puntare semplicemente alla classe sottostante?
Se si decompila 'System.Management.Automation.Language.Compiler.VisitConvertExpression', allora puoi vedere che ci sono gesti speciali per tre nomi di tipo: 'ordered',' PSCustomObject' e 'ref'. – PetSerAl