सवाल पावरहेल में एक स्ट्रिंग को एक int में परिवर्तित करने का बेवकूफ तरीका क्या है?


मुझे मिली एकमात्र विधि प्रत्यक्ष कलाकार है:

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

क्या यह पावरहेल में मानक दृष्टिकोण है? क्या यह उम्मीद की जाती है कि रूपांतरण सफल होगा और यदि ऐसा है तो यह सुनिश्चित करने से पहले एक परीक्षण किया जाएगा?


44
2018-03-14 11:00


मूल




जवाब:


.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

47
2018-03-14 11:13



कॉरर्सिंग सुविधा मेरे लिए काम करती है! धन्यवाद - dopplesoldner
@dopplesoldner मदद करने के लिए खुशी हुई! - CB.
दिलचस्प रूप से unary + मेरे लिए भी काम करता है: + $ संख्या एएसस्ट्रिंग। - Alexander Kellett


आप -as ऑपरेटर का उपयोग कर सकते हैं। यदि कास्टिंग सफल हो तो आप एक संख्या वापस प्राप्त करें:

$numberAsString -as [int]

55
2018-03-14 11:39



यदि कलाकार सफल नहीं होता है तो हमेशा एक आईएनटी '0' वापस कर दें! - CB.
दरअसल, अगर कास्ट विफल रहता है तो यह $ शून्य वापस आता है। यदि आप इसे [int] (या तो निहित या स्पष्ट रूप से) पर डालते हैं तो आपको 0 मिलता है। - mjolinor
@mjolinor। rigth! एक निहित जाली var के साथ इसका परीक्षण किया है! धन्यवाद - CB.
हमेशा नहीं, एक अच्छा स्पष्टीकरण खोजने का प्रयास क्यों [int] "" या "" -as [int] वापस देता है 0. "foo" -as [int] कुछ भी वापस नहीं देता है। - Shay Levy
ऐसा लगता है कि पीएस int int के लिए एक शून्य है। [int] '' और [int] $ null रिटर्न 0 भी। (अस्वीकरण - डब्ल्यूएजी निम्नानुसार है) => ऐसा लगता है कि पाइपलाइन स्केलर / सरणी परिणामों को वापस करने के तरीके को समायोजित करना हो सकता है। $ गिनती + = $ _। गिनती हमेशा काम करेगा चाहे $ _ सरणी या स्केलर है या नहीं। - mjolinor


यह एक त्वरित सच / गलत परीक्षण है कि क्या यह [int]

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

12
2018-03-14 11:37





मेरे लिए $numberAsString -as [int] @Shay Levy का सबसे अच्छा अभ्यास है, मैं भी उपयोग करता हूं [type]::Parse(...) या [type]::TryParse(...)

लेकिन, आपको जिस चीज की आवश्यकता है उसके आधार पर आप बाईं ओर एक int के साथ अंकगणितीय ऑपरेटर के दाईं ओर एक संख्या वाली एक स्ट्रिंग डाल सकते हैं जिसके परिणामस्वरूप एक इंट 32 होगा:

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

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

आप समस्या के मामले में व्यवहार करने के लिए अपवाद (कोशिश / विश्लेषण) का उपयोग कर सकते हैं


8
2018-03-14 13:00





मैं शायद ऐसा कुछ करूंगा:

[int]::Parse("35")

लेकिन मैं वास्तव में एक पावरहेल लड़का नहीं हूँ। यह System.Int32 से स्थिर पार्स विधि का उपयोग करता है। यदि स्ट्रिंग को पार्स नहीं किया जा सकता है तो इसे अपवाद फेंकना चाहिए।


3
2018-03-14 11:11





शावी लेवी उत्तर पर बिल्डिंग:

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

चूंकि $ null का मूल्यांकन झूठा (बूल में) किया जाता है, इसलिए यह कथन आपको सही या गलत बताएगा यदि कास्टिंग सफल हो या नहीं।


0
2018-03-08 13:47



असहमत: [bool]('0' -as [int]) रिटर्न false हालांकि '0' -as [int] सफल होता है! - JosefZ


$source = "number35"

$number=$null

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

बस इसे अंक खिलाएं और यह एक में परिवर्तित हो जाएगा Int32


-2
2017-11-21 18:46