在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