Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Powershell中,将字符串转换为int的惯用方法是什么?_Powershell - Fatal编程技术网

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

在Powershell中,将字符串转换为int的惯用方法是什么?,powershell,Powershell,我发现的唯一方法是直接投射: > $numberAsString = "10" > [int]$numberAsString 10 这是Powershell中的标准方法吗?是否希望在之前进行测试以确保转换成功?如果是,如何进行?我可能会这样做: [int]::Parse("35") 但我并不是一个真正的超级英雄。它使用System.Int32中的静态解析方法。如果无法解析字符串,它应该抛出异常。使用.net [int]$b = $null #used after as refen

我发现的唯一方法是直接投射:

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

这是Powershell中的标准方法吗?是否希望在之前进行测试以确保转换成功?如果是,如何进行?

我可能会这样做:

[int]::Parse("35")
但我并不是一个真正的超级英雄。它使用System.Int32中的静态解析方法。如果无法解析字符串,它应该抛出异常。

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


快速测试是否将转换为[int]

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

您可以使用-as操作符。如果铸造成功,您将获得一个编号:

$numberAsString -as [int]

对我来说,@Shay Levy的
$numberastring-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
您可以使用异常(try/parse)来处理问题

$source = "number35"

$number=$null

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

只需输入数字,它就会转换成一个基于Shavy Levy答案的
Int32

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

由于$null的计算结果为false(在bool中),因此此语句将根据转换是否成功给出true或false

如果强制转换未成功,请始终返回INT“0”!实际上,如果强制转换失败,它将返回$null。如果将其转换为[int](隐式或显式),则得到0。@mjolinor。里格斯!我们已经用隐式casted var对其进行了测试!感谢并非总是如此,尝试找到一个很好的解释为什么[int]“”或“”-因为[int]返回0。“foo”-as[int]不返回任何内容。这似乎是PS将null强制为int.[int]''的方式,[int]$null也返回0。(免责声明-WAG如下)=>看起来可能是为了适应管道返回标量/数组结果的方式$count+=$\无论$\是数组还是标量,count都将始终有效。@dopplesoldner很高兴为您提供帮助!不同意:
[bool]('0'-as[int])
返回
false
,尽管
'0'-as[int]
成功
($null-ne($var-as[int])
在除空字符串以外的所有情况下都有效,因此您也需要检查它
(!($null-eq($var-as[int])-或($null-eq$var))
这是什么意思?
[bool]($var -as [int])