1

私はとても混乱しています。Powershell の foreach が C# とは異なる動作をする理由がわかりません。

この単純なコードは出力を生成しません。

@{a=1; b=2} | %{ $_.key }

C#を使用してLinqpadで行ったこれの近似は、私が期待する出力を提供します:

var ht = new Hashtable();
ht["a"] = 1;
ht["b"] = 2;

foreach (DictionaryEntry kvp in ht)
{
    kvp.Key.Dump();
}

// output

a
b

ハッシュテーブルの Keys メンバーを列挙すると、必要なことを実行できます。しかし、ハッシュテーブル自体を列挙してもキーと値のペアが返されない理由がわかりません。実際、オブジェクト自体を返すようです:

>     @{a=1; b=2} | %{ $_.gettype() }

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

Powershell はここで何をしているのですか?

4

1 に答える 1

3

PowerShellパイプラインは、配列とコレクション(1レベル)を「展開」しますが、ハッシュテーブルは「展開」しません。PowerShellでハッシュテーブルのキーと値のペアを列挙する場合は、.getenumerator()メソッドを呼び出します。

$ht = @{a=1;b=2}
$ht.GetEnumerator()



Name                           Value                                                             
----                           -----                                                             
a                              1                                                                 
b                              2    
于 2013-02-20T03:02:02.707 に答える