Soru Powershell'de bir dizeyi bir int'ye dönüştürmenin deyimsel yolu nedir?


Bulduğum tek yöntem doğrudan bir döküm:

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

Bu Powershell'deki standart yaklaşım mı? Dönüşümün başarılı olacağından emin olmak için daha önce bir test yapılması ve nasıl yapılacağı beklenir mi?


44
2018-03-14 11:00


Menşei




Cevaplar:


.Net kullanarak

[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

Bu not (powershell zorlama özelliği)

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

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

47
2018-03-14 11:13



zorlama özelliği benim için çalışıyor! Teşekkürler - dopplesoldner
@dopplesoldner Yardım için sevindim! - CB.
İlginççe unary + da benim için çalışıyor: + $ numberAsString. - Alexander Kellett


-As operatörünü kullanabilirsiniz. Döküm başarılı olursa bir sayı geri alırsınız:

$numberAsString -as [int]

55
2018-03-14 11:39



Eğer cast başarılı olmazsa daima bir INT '0' döndürün! - CB.
Aslında, döküm başarısız olursa, $ null değerini döndürür. Bunu daha sonra [int] 'ye (örtülü ya da açık olarak) gönderirseniz 0 alırsınız. - mjolinor
@mjolinor. rigth! Bir örtülü döküm var ile test ettik! Teşekkürler - CB.
Her zaman değil, neden [int] "" ya da "" -as [int] geri verdiğine dair iyi bir açıklama yapmaya çalışıyorum. "Foo" -as [int] hiçbir şey geri vermez. - Shay Levy
Bu, PS'nin null'u int için zorladığı yol gibi görünüyor. [int] '' ve [int] $ null 0 da döner. (Feragatname - WAG aşağıdaki gibidir) => Boru hattının skaler / dizi sonuçlarını döndürme şeklini kapsayabilecek gibi görünüyor. $ count + = $ _. count, $ _ dizisinin veya skalerinin olup olmadığına bakılmaksızın her zaman çalışır. - mjolinor


[İnt] için yayınlanıp yayınlanmayacağına dair hızlı bir doğru / yanlış test

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

12
2018-03-14 11:37





Benim için $numberAsString -as [int] @Shay Levy en iyi uygulamadır, ben de kullanıyorum [type]::Parse(...) veya [type]::TryParse(...)

Ancak, ihtiyacınız olan şeye bağlı olarak, aritmetik operatörün sağında soldaki int ile bir sayı içeren bir dize koyabilirsiniz, sonuç Int32 olacaktır:

PS > $b = "10"
PS > $a = 0 + $b
PS > $a.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

Sorun durumunda davranmak için İstisna'yı (try / parse) kullanabilirsiniz.


8
2018-03-14 13:00





Muhtemelen böyle bir şey yapardım:

[int]::Parse("35")

Ama ben gerçek bir Powershell adamı değilim. System.Int32'den statik Parse yöntemini kullanır. Dizenin ayrıştırılamaması bir istisna atmalıdır.


3
2018-03-14 11:11





Shavy Levy'e cevap vermek:

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

$ Null false olarak değerlendirildiğinden (bool cinsinden), bu ifade, dökümün başarılı olup olmamasına bağlı olarak size doğru veya yanlış olur.


0
2018-03-08 13:47



Katılmıyorum: [bool]('0' -as [int]) döner false olmasına rağmen '0' -as [int] başarılı! - JosefZ


$source = "number35"

$number=$null

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

Sadece rakamları besle ve bir Int32


-2
2017-11-21 18:46