在Powershell中,将字符串转换为int的惯用方法是什么?
我发现的唯一方法是直接投射:在Powershell中,将字符串转换为int的惯用方法是什么?,powershell,Powershell,我发现的唯一方法是直接投射: > $numberAsString = "10" > [int]$numberAsString 10 这是Powershell中的标准方法吗?是否希望在之前进行测试以确保转换成功?如果是,如何进行?我可能会这样做: [int]::Parse("35") 但我并不是一个真正的超级英雄。它使用System.Int32中的静态解析方法。如果无法解析字符串,它应该抛出异常。使用.net [int]$b = $null #used after as refen
> $numberAsString = "10"
> [int]$numberAsString
10
这是Powershell中的标准方法吗?是否希望在之前进行测试以确保转换成功?如果是,如何进行?我可能会这样做:
[int]::Parse("35")
但我并不是一个真正的超级英雄。它使用System.Int32中的静态解析方法。如果无法解析字符串,它应该抛出异常。使用.net
[int]$b = $null #used after as refence
$b
0
[int32]::TryParse($a , [ref]$b ) # test if is possible to cast and put parsed value in reference variable
True
$b
10
$b.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
注意这一点(powershell强制功能)
快速测试是否将转换为[int]
[bool]($var -as [int] -is [int])
您可以使用-as操作符。如果铸造成功,您将获得一个编号:
$numberAsString -as [int]
对我来说,@Shay Levy的
$numberastring-as[int]
是最佳实践,我还使用[type]::Parse(…)
或[type]::TryParse(…)
但是,根据需要,只需在算术运算符的右侧放置一个包含数字的字符串,在左侧放置一个int,结果将是一个Int32:
PS > $b = "10"
PS > $a = 0 + $b
PS > $a.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
您可以使用异常(try/parse)来处理问题
$source = "number35"
$number=$null
$result = foreach ($_ in $source.ToCharArray()){$digit="0123456789".IndexOf($\_,0);if($digit -ne -1){$number +=$\_}}[int32]$number
只需输入数字,它就会转换成一个基于Shavy Levy答案的
Int32
:
[bool]($var -as [int])
由于$null的计算结果为false(在bool中),因此此语句将根据转换是否成功给出true或false 如果强制转换未成功,请始终返回INT“0”!实际上,如果强制转换失败,它将返回$null。如果将其转换为[int](隐式或显式),则得到0。@mjolinor。里格斯!我们已经用隐式casted var对其进行了测试!感谢并非总是如此,尝试找到一个很好的解释为什么[int]“”或“”-因为[int]返回0。“foo”-as[int]不返回任何内容。这似乎是PS将null强制为int.[int]''的方式,[int]$null也返回0。(免责声明-WAG如下)=>看起来可能是为了适应管道返回标量/数组结果的方式$count+=$\无论$\是数组还是标量,count都将始终有效。@dopplesoldner很高兴为您提供帮助!不同意:
[bool]('0'-as[int])
返回false
,尽管'0'-as[int]
成功($null-ne($var-as[int])
在除空字符串以外的所有情况下都有效,因此您也需要检查它(!($null-eq($var-as[int])-或($null-eq$var))
这是什么意思?
[bool]($var -as [int])