我不明白为什么按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/

10-13 07:51
查看更多