Подтвердить что ты не робот

В Powershell каков идиоматический способ преобразования строки в int?

Единственный метод, который я нашел, - это прямой листинг:

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

Это стандартный подход в Powershell? Ожидается ли, что тест будет сделан раньше, чтобы убедиться, что преобразование будет успешным, и если да, то как?

4b9b3361

Ответ 1

Использование .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

обратите внимание на это (функция принудительной принудительной проверки)

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

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

Ответ 2

Вы можете использовать оператор -as. Если премия вернется, вы получите номер:

$numberAsString -as [int]

Ответ 3

Быстрое истинное/ложное испытание того, будет ли оно передаваться в [int]

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

Ответ 4

Для меня $numberAsString -as [int] of @Shay Levy - лучшая практика, я также использую [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), чтобы вести себя в случае проблемы

Ответ 5

Я бы, наверное, сделал что-то вроде этого:

[int]::Parse("35")

Но я не парень Powershell. Он использует статический метод Parse из System.Int32. Он должен вызывать исключение, если строка не может быть проанализирована.

Ответ 6

Настройте ответ на Shavy Levy:

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

Поскольку $null вычисляется как false (в bool), этот оператор даст вам true или false в зависимости от успеха кастинга или нет.

Ответ 7

$source = "number35"

$number=$null

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

Просто подайте его цифры, и он преобразуется в Int32