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
これは、アクセラレータを使用すると、コードを短くするだけでなく、他の多くのことができることを意味します。
この問題に関する私の質問は次のとおりです。
- アクセラレータを使用する場合と完全な型名を使用する場合の違いについて、興味深い例はありますか?
- アクセラレータが一般的なベスト プラクティスとして利用できる場合は常に、完全な型名の使用を避けるべきですか?
- おそらくリフレクションを使用して、アクセラレータが基になるクラスを指す以外のことを行うかどうかを確認する方法は?