我不明白为什么按Enter键与按键盘上的0相同。
[int] $Choice = -1
$Count = 2
while ($Choice -lt 0 -or $Choice -gt $Count)
{
Write-Host "Input number"
$Choice = Read-Host
Write-Host "choice:"
Write-Host $Choice
}
即使按回车键,输出也将为0。我希望用户明确输入0。
最佳答案
在第一个语句中:
[int] $Choice = -1
...您将
$choice
类型转换为[int]
。当您在分配的左侧(变量名的左侧)应用强制类型转换时,PowerShell会将其“记住”为类型约束,并将变量视为强类型-PowerShell将尝试转换您所需要的任何内容从那里分配给
$choice
到[int]
。在没有任何其他输入的情况下在提示中输入回车会导致
Read-Host
返回空字符串(例如""
)转换逻辑将空字符串视为
$null
,并将$null
转换为[int]
的结果为0
。您可以通过将一个空字符串直接投射到[int]
来看到此信息:PS C:\> [int]""
0
如果您明确要求输入数字,则可能应先验证
Read-Host
的输入,然后再分配给$Choice
:$inputString = Read-Host
if($inputString -notmatch '^\d+$') {
Write-Host "Digits only please!"
continue
}
关于powershell - 为什么按 “Enter”等于数字0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60249679/