在Powershell中将string转换为int的惯用方法是什么?
我发现的唯一方法是直接演员:
> $numberAsString = "10" > [int]$numberAsString 10
这是Powershell的标准方法吗? 预计是否会做一个testing,以确保转换将成功,如果是的话,如何呢?
使用.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强制function)
$a = "10" $a + 1 #second value is evaluated as [string] 101 11 + $a # second value is evaluated as [int] 21
您可以使用-as运算符。 如果施法成功,你会得到一个数字:
$numberAsString -as [int]
是否会投射到[int]的快速真/假testing
[bool]($var -as [int] -is [int])
对我来说@Shay Levy的$numberAsString -as [int]
numberAsString $numberAsString -as [int]
是最好的做法,我也使用[type]::Parse(...)
或[type]::TryParse(...)
但是,根据你所需要的,你可以在一个算术运算符的右边放一个包含数字的string,在左边是一个int,结果将是一个Int32:
PS > $b = "10" PS > $a = 0 + $b PS > $a.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Int32 System.ValueType
您可以使用exception(尝试/parsing)行为以防止问题
我可能会这样做:
[int]::Parse("35")
但我不是一个真正的Powershell家伙。 它使用System.Int32中的静态分析方法。 如果string不能被parsing,它应该抛出一个exception。
build立在萨维征收答案:
[bool]($var -as [int])
因为$ null被赋值为false(在bool中),这个语句会根据赋值是否成功而赋予true或者false。
$source = "number35" $number=$null $result = foreach ($_ in $source.ToCharArray()){$digit="0123456789".IndexOf($\_,0);if($digit -ne -1){$number +=$\_}}[int32]$number
只要喂它的数字,它将转换为Int32