私はとても混乱しています。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 はここで何をしているのですか?