在Powershell中,将字符串转换为int的惯用方法是什么?

时间:2012-03-14 11:00:27

标签: powershell

我找到的唯一方法是直接演员:

> $numberAsString = "10"
> [int]$numberAsString
10

这是Powershell的标准方法吗?是否期望在确保转换成功之前进行测试,如果成功,该怎么做?

7 个答案:

答案 0 :(得分:59)

您可以使用-as运算符。如果铸造成功,你会得到一个数字:

$numberAsString -as [int]

答案 1 :(得分:55)

使用.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强制功能)

$a = "10"
$a + 1 #second value is evaluated as [string]
101 

11 + $a # second value is evaluated as [int]
21

答案 2 :(得分:12)

是否会转换为[int]

的快速真/假测试
[bool]($var -as [int] -is [int])

答案 3 :(得分:9)

@Shay Levy的$numberAsString -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

您可以使用Exception(try / parse)来解决问题

答案 4 :(得分:3)

我可能会这样做:

[int]::Parse("35")

但我不是真正的Powershell家伙。它使用System.Int32中的静态Parse方法。如果无法解析字符串,它应该抛出异常。

答案 5 :(得分:0)

建立Shavy Levy答案:

[bool]($var -as [int])

因为$ null被评估为false(在bool中),所以这个语句将给你真或假,具体取决于转换成功与否。

答案 6 :(得分:-2)

$source = "number35"

$number=$null

$result = foreach ($_ in $source.ToCharArray()){$digit="0123456789".IndexOf($\_,0);if($digit -ne -1){$number +=$\_}}[int32]$number

只需输入数字,它就会转换为Int32