我有一个哈希表,我现在正试图制作一个if语句,以检查通过哈希表的内容是否匹配其中的任何内容。
$netVerConv = @{
'v2.0' = "lib\net20";
'v3.0' = "lib\net30";
'v3.5' = "lib\net35";
'v4.0' = "lib\net40";
'v4.5' = "lib\net45";
}
$target = $netVerConv.Get_Item($netVerShort)
if () {
}
以上是我正在使用的代码区域,目标变量使用Get_Item命令通过$ netVerConv哈希表运行$ netVerShort。我已经为其构建框架的if语句将检查netVerShort是否匹配哈希表中的任何内容,如果它没有,它将停止程序,我知道如何处理简单的退出命令。
答案 0 :(得分:4)
其他建议适用于您的特定方案,但通常您应该使用ContainsKey()
方法查看哈希表中是否存在密钥。例如,哈希表value
可以是$ null或$ false,在这种情况下,通过Get_Item()
或更简单Item[$netVerShort]
的结果进行测试将返回假阴性。所以我推荐这种方法来测试哈希表中是否存在密钥。你的意图也更明显:
if (!$netVerConv.ContainsKey($netVerShort) {
...
}
答案 1 :(得分:1)
这个怎么样:
if( $target -eq $null ) {
echo "Didn't Match"
exit
}
答案 2 :(得分:0)
另一种选择:
if (-not ($target = $netVerConv.Get_Item($netVerShort)))
{
Write-Error "Version $netVerShort not found"
Exit
}
您还可以将其重新计算为Switch
$target =
Switch ($netVerShort)
{
'v2.0' {"lib\net20"}
'v3.0' {"lib\net30"}
'v3.5' {"lib\net35"}
'v4.0' {"lib\net40"}
'v4.5' {"lib\net45"}
Default {
Write-Error "Version $netVerShort not found"
Exit
}
}