为什么按“Enter”等于数字 0?

met*_*ter 2 powershell

我不明白为什么按回车键和按键盘上的 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

}
Run Code Online (Sandbox Code Playgroud)

即使按回车,输出也会是 0。我希望用户明确输入 0。

Mat*_*sen 5

在第一个声明中:

[int] $Choice = -1
Run Code Online (Sandbox Code Playgroud)

...您将类型转换$choice[int].

当您对赋值的左侧(变量名称的左侧)应用强制转换时,PowerShell 会将其“记住”为类型约束并将变量视为强类型 - PowerShell 将尝试转换任何您$choice从那里分配到[int].

在没有任何其他输入的情况下在提示中按 Enter 会Read-Host返回一个空字符串(如""

转换逻辑将空字符串视为$null,并强制转换$null[int]结果值0。您可以通过将空字符串[int]直接转换为:

PS C:\> [int]""
0
Run Code Online (Sandbox Code Playgroud)

如果您明确需要一个数字,您可能应该Read-Host在分配给之前验证输入$Choice

$inputString = Read-Host
if($inputString -notmatch '^\d+$') {
    Write-Host "Digits only please!"
    continue
}
Run Code Online (Sandbox Code Playgroud)