我感到很困惑。我不明白为什么 Powershell 中的 foreach 行为与 C# 如此不同。
这个简单的代码不会产生任何输出:
@{a=1; b=2} | %{ $_.key }
我在 Linqpad 中使用 C# 做的一个近似值给出了我期望的输出:
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 在这里做什么?