PowerShell v3.0でPSCustomObject
が導入されました。それはPSObject
のようですが、より良いです。その他の改善(例えば、プロパティの順序は保持されている)、ハッシュテーブルからオブジェクトを作成が簡略化されるなかで:PSCustomObject
があるのでPowerShellタイプアクセラレータ:PSObjectとPSCustomObject
[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
、同じように動作します:
[PSCustomObject]@{one=1; two=2;}
今では、この文があることは明らかと思われます完全な名前空間+クラス名の "エイリアス"。代わりに、私はエラーを取得する:
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
クラスを参照することを発見した - これは、アクセラレータを使用して束を行うことができますことを意味していますコードを短くする以外のものがあります。この問題について
私の質問は以下のとおりです。
- あなたは完全なタイプ名を使用して対アクセラレータを使用しての違いをいくつかの興味深いexamaplesを持っていますか?
- アクセラレータが一般的なベストプラクティスとして利用可能であるときはいつでもフルタイプの名前を使用する必要がありますか?
- アクセラレータが基本クラスを指すだけでなく他のことをしているかどうかを、おそらくリフレクションを使って確認する方法はありますか?静的メソッドを見ると
「System.Management.Automation.Language.Compiler」を逆コンパイルする場合。VisitConvertExpression'を実行すると、 'ordered'、' PSCustomObject'、 'ref'という3つの型名に対して特別な処理があることが分かります。 – PetSerAl