我是PowerShell脚本的新手,正在尝试Function
.这是我写的代码:
Function Add
{
$sum = 0;
for($i = 0; $i -le $args.length; ++$i)
{
[int] $num = $args[$i]
$sum += $num
}
Write-Output "Sum is $sum"
}
Run Code Online (Sandbox Code Playgroud)
我试着打电话使用Add 1,2,3
.但是,当我执行时,我收到以下错误:
无法将"System.Object []"类型的"System.Object []"值转换为"System.Int32"类型.
知道如何解决这个问题吗?
JPB*_*anc 21
Powershell中的Big TRAP","是数组运算符,只需在命令行中尝试:
PS> 1,2,3
Run Code Online (Sandbox Code Playgroud)
你会看到阵列
PS> (1,2,3).gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
Run Code Online (Sandbox Code Playgroud)
所以试着打电话:
PS> Add 1 2 3
Sum is 6
Run Code Online (Sandbox Code Playgroud)
并且不要忘记在Powershell中你正在玩.NET的顶级对象
所以你有两个朋友:
gettype()
,让你的对象的类型的方法Get-Member
cmdlet将有助于您对性能和对象的方法Get-member有许多参数可以提供帮助.
通常执行强制转换并在右侧分配类型:
$num = [int] $args[$i]
这可能是你的问题吗?
第二次观察:
正如 @JPBlanc 所观察到的,您将一个数组传递给函数,而不是三个参数。使用:
添加 1 2 3
你会得到它的。无论如何,在这种情况下你不需要铸造。可能在这个:
添加“1”“2”“3”
显然你可以继续像这样调用你的函数Add 1,2,3
,但你需要将其更改如下:
函数添加{ 参数[0] | % {$sum=0}{$sum+=$_}{write-output "总和是 $sum"} }
归档时间: |
|
查看次数: |
45385 次 |
最近记录: |