In Powershell what is the idiomatic way of converting a string to an int?

前端 未结 7 619
栀梦
栀梦 2020-12-05 12:32

The only method I have found is a direct cast:

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

Is this the standard approach in

相关标签:
7条回答
  • 2020-12-05 13:05
    $source = "number35"
    
    $number=$null
    
    $result = foreach ($_ in $source.ToCharArray()){$digit="0123456789".IndexOf($\_,0);if($digit -ne -1){$number +=$\_}}[int32]$number
    

    Just feed it digits and it wil convert to an Int32

    0 讨论(0)
  • 2020-12-05 13:16

    Using .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
    

    note this (powershell coercing feature)

    $a = "10"
    $a + 1 #second value is evaluated as [string]
    101 
    
    11 + $a # second value is evaluated as [int]
    21
    
    0 讨论(0)
  • 2020-12-05 13:18

    For me $numberAsString -as [int] of @Shay Levy is the best practice, I also use [type]::Parse(...) or [type]::TryParse(...)

    But, depending on what you need you can just put a string containing a number on the right of an arithmetic operator with a int on the left the result will be an Int32:

    PS > $b = "10"
    PS > $a = 0 + $b
    PS > $a.gettype()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     Int32                                    System.ValueType
    

    You can use Exception (try/parse) to behave in case of Problem

    0 讨论(0)
  • 2020-12-05 13:19

    A quick true/false test of whether it will cast to [int]

    [bool]($var -as [int] -is [int])
    
    0 讨论(0)
  • 2020-12-05 13:21

    I'd probably do something like that :

    [int]::Parse("35")
    

    But I'm not really a Powershell guy. It uses the static Parse method from System.Int32. It should throw an exception if the string can't be parsed.

    0 讨论(0)
  • 2020-12-05 13:26

    Building up on Shavy Levy answer:

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

    Because $null is evaluated to false (in bool), this statement Will give you true or false depending if the casting succeeds or not.

    0 讨论(0)
提交回复
热议问题