在PowerShell中读取单个按键(整数)
我知道这一点,但它没有回答我目前的问题 我知道当前行给了我下一个按下的键:在PowerShell中读取单个按键(整数),powershell,Powershell,我知道这一点,但它没有回答我目前的问题 我知道当前行给了我下一个按下的键: $Host.UI.RawUI.ReadKey().Character 例如,如果我按1,我会得到1 但这是一个字符串(实际上是一个字符),我希望数字是一个整数 我尝试: [int]$Host.UI.RawUI.ReadKey().Character 以及: 但在这两行中,如果按1,则会得到49 我知道我可以简单地做到: [int]$Host.UI.RawUI.ReadKey().Character - 48 但我想
$Host.UI.RawUI.ReadKey().Character
例如,如果我按1
,我会得到1
但这是一个字符串(实际上是一个字符),我希望数字是一个整数
我尝试:
[int]$Host.UI.RawUI.ReadKey().Character
以及:
但在这两行中,如果按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)
[int] $out = 0
$in = $Host.UI.RawUI.ReadKey().Character
if ([int]::TryParse($in, [ref]$out)) {
$out
}
else {
Write-Warning 'Non-int entered!'
}
如果您认为用户将输入非整数,也可以使用
System.Int32.TryParse
:
PS> [int]::TryParse
OverloadDefinitions
-------------------
static bool TryParse(string s, [ref] int result)
使用中:
$in = $Host.UI.RawUI.ReadKey().Character
[int]::Parse($in)
[int] $out = 0
$in = $Host.UI.RawUI.ReadKey().Character
if ([int]::TryParse($in, [ref]$out)) {
$out
}
else {
Write-Warning 'Non-int entered!'
}
另一种方法:
$int = switch -regex ([console]::readkey($true).keychar) {'[0-9]' {[int]"$_"}}
(如果输入非数字字符,将返回
$null
)是的,一定要使用TryParse!你的回答是可行的,但我宁愿等一段时间再接受。顺便说一下,为了使用TryParse,我必须将[int]$out
修改为[int]$out=0
。否则我会得到不存在的VariableReference
。它实际上不是一个字符串,而是一个字符。@marsze,噢,我不知道。我是新来的。