PowerShell函数中的类型转换问题

k2arahey  于 2023-03-12  发布在  Shell
关注(0)|答案(2)|浏览(199)

我是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"
}

我试着用Add 1,2,3调用,但是,当我执行时,我得到了以下错误:
无法将类型“System.Object []”的“System.Object []”值转换为类型“System.Int32”。
有办法解决吗?

gwo2fgha

gwo2fgha1#

Powershell中有一个bg陷阱:,是数组运算符。请在命令行尝试执行以下操作:

PS> 1,2,3

你会看到它是一个数组:

PS> (1,2,3).gettype()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

尝试调用不带逗号的Add

PS> Add 1 2 3
Sum is 6

别忘了在Powershell中所有东西都是对象,你是在. NET上玩游戏。
你有两个朋友

  1. gettype()方法,用于提供对象的类型
  2. Get-Member CmdLet可帮助您处理对象的属性和方法
    Get-member有许多参数可以提供帮助。
vfwfrxfs

vfwfrxfs2#

通常执行铸造,在右侧指定类型:

$num = [int] $args[$i]

这是你的问题吗
第二点意见:
正如@JPBlanc所观察到的,您传递给函数的是一个数组,而不是三个参数。

Add 1 2 3

你会得到它的。不管怎样,在这种情况下你不需要选角。可能是这样的:

Add "1" "2" "3"

显然,您可以继续像Add 1,2,3那样调用函数,但需要按如下方式进行更改:

Function Add {
   args[0] | % {$sum=0}{$sum+=$_}{write-output "Sum is $sum"}
}

相关问题