5

PowerShellでは、次のように角かっこでタイプを指定できます。

PS C:\Users\zippy> [int]

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

[xml]のようなタイプアクセラレータも組み込まれており、XmlDocumentに何かをキャストしたいときにいくつかのキーストロークを節約できます。

PS C:\Users\zippy> [xml]

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    XmlDocument                              System.Xml.XmlNode

次の2つのコマンドのいずれかを使用してリストを生成できます。

  • PS v2.0[type]::gettype("System.Management.Automation.TypeAccelerators")::Get
  • PS v3.0[psobject].assembly.gettype("System.Management.Automation.TypeAccelerators")::Get

PowerShell 3.0は、[ordered]という演算子を追加します。ただし、タイプエイリアスではありません。

PS C:\Users\zippy> [ordered]
Unable to find type [ordered]: make sure that the assembly containing this type is loaded.
At line:1 char:1
+ [ordered]
+ ~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (ordered:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

ただし、HashtableOrderedDictionaryにキャストすることはできます。

PS C:\Users\zippy> ([ordered]@{}).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     OrderedDictionary                        System.Object

だから私の質問は、[注文済み]がタイプアクセラレータではない場合、それは何ですか?

4

2 に答える 2

3

残念ながら[ordered]、少し異常です。タイプでもアクセラレータでもありません。これはパーサーにのみ存在し、ハッシュテーブルを作成する方法のヒントとして扱われます(つまり、ハッシュテーブルを使用せず、代わりにordereddictionaryを使用します)。:Dではないことを除いて、.net属性と考えてください。

于 2012-09-13T01:53:44.530 に答える
0

次のコマンドを使用します。

Trace-Command -Name TypeConversion -Expression {([ordered]@{}).gettype()} -PSHost

インタプリタがロードされたアセンブリで再帰的に型を一致させようとし、OrderedDictionaryと一致するように終了したと想像してみてください。これは、単なる仮定です。

于 2012-05-14T19:54:40.903 に答える