[英]Read individual key presses (integers) in PowerShell
我知道这个问题,但它没有回答我目前的问题。
我知道当前行给了我下一个按键:
$Host.UI.RawUI.ReadKey().Character
例如,如果我按1
,我得到1
。
但这是一个字符串(好吧,实际上是一个字符),我希望数字为整数。
我试着用:
[int]$Host.UI.RawUI.ReadKey().Character
和:
$Host.UI.RawUI.ReadKey().Virtualkeycode
但是在这两行中,如果按1
,则会得到49
。
我知道我可以做到:
[int]$Host.UI.RawUI.ReadKey().Character - 48
但我想知道是否有更好的方法来做到这一点。 例如,如果我想获得字母和数字, -48
的使用会更加困难,因为我需要使用一些条件块。
所以,我的问题是: 有没有更好的方法来将按下的键(数字)作为整数而不是[int]$Host.UI.RawUI.ReadKey().Character - 48
?
你有一个选项是System.Int32.Parse
方法:
PS> [int]::Parse
OverloadDefinitions
-------------------
static int Parse(string s)
正在使用:
$in = $Host.UI.RawUI.ReadKey().Character
[int]::Parse($in)
如果您认为用户将输入非整数System.Int32.TryParse
您也可以使用System.Int32.TryParse
:
PS> [int]::TryParse
OverloadDefinitions
-------------------
static bool TryParse(string s, [ref] int result)
正在使用:
[int] $out = 0
$in = $Host.UI.RawUI.ReadKey().Character
if ([int]::TryParse($in, [ref]$out)) {
$out
}
else {
Write-Warning 'Non-int entered!'
}
另一种方法:
# (will return $null if non-numeric character entered)
$int = switch -regex ([console]::readkey($true).keychar) {'[0-9]' {[int]"$_"}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.