Почему нажатие «Enter» эквивалентно номеру 0? - PullRequest
2 голосов
/ 16 февраля 2020

Я не понимаю, почему нажатие клавиши ввода аналогично нажатию на клавиатуре 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.

1 Ответ

5 голосов
/ 16 февраля 2020

В самом первом утверждении:

[int] $Choice = -1

... вы вводите $choice в [int].

Когда вы применяете приведение к левой стороне присваивания (слева от имени переменной), PowerShell "запомнит" его как ограничение типа и обработает переменная строгой типизации - PowerShell будет пытаться преобразовать все, что вы назначите $choice, в [int].

Нажатие на клавишу ввода в приглашении без других вводимых данных приводит к Read-Host возвращению пустой строки (например, "")

В логе преобразования c пустая строка обрабатывается как $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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...