首页 > 解决方案 > 方法调用失败,因为 [System.Object[]] 不包含名为“op_Division”的方法

问题描述

我正在尝试创建一个定价函数,它需要一个usd价格和一个eur价格并进行一些计算。但是,尝试运行它时出现以下错误:

方法调用失败,因为 [System.Object[]] 不包含名为“op_Division”的方法。在行:11 字符:5

代码:

function Get-Pricing($USD, $EUR) {
    [hashtable]$Return = @{}

    $USDGBP = [math]::Round((Invoke-RestMethod "https://api.exchangeratesapi.io/latest?base=USD").rates.GBP,2)
    $EURGBP = [math]::Round((Invoke-RestMethod "https://api.exchangeratesapi.io/latest?base=EUR").rates.GBP,2)

    $USDEx = ($USD * $USDGBP)
    $EUREx = ($EUR * $EURGBP)

    $ReturnedPrice = ((( $EUREx + 0.25 ) * 0.32 ) + $EUREx )
    $PriceIndex = (((( $USDEx / $ReturnedPrice ) * 0.5 ) + (( $EUREx / $ReturnedPrice ) * 1.5 ) + 1 ) / 3)

    $PriceCM = (( $ReturnedPrice / $EUREx ) * $PriceIndex )

    $Return.PriceIndex = $PriceIndex
    $Return.PriceCM = $PriceCM

    Return $Return
}

[float]$a = 23.83
[float]$b = 16.11

Write-Host $a  -ForegroundColor Red
Write-Host $b  -ForegroundColor Red

$Pricing = Get-Pricing($a, $b)

Write-Host "A: "$Pricing.PriceIndex -ForegroundColor Cyan
Write-Host "B: "$Pricing.PriceCM -ForegroundColor Cyan

标签: powershell

解决方案


PowerShell 的命令调用语法与其他具有 C 风格语法的语言略有不同,您必须按名称绑定参数参数:

Get-Pricing -USD $a -EUR $b

或按位置:

Get-Pricing $a $b

但是当你这样做时:

Get-Pricing ($a, $b)
            \______/
               |
      # PowerShell just sees a single argument here

...您实际上是将 2 项数组传递给$USD参数,而没有传递给$EUR参数。


如果您显式键入参数,运行时绑定器将能够告诉您出了什么问题:

PS C:\> function Get-Pricing([float]$USD, [float]$EUR) {
>>   # ...
>> }
PS C:\> Get-Pricing($a,$b)
Get-Pricing : Cannot process argument transformation on parameter 'USD'. Cannot convert the "System.Object[]" value of type
"System.Object[]" to type "System.Single".
At line:1 char:12
+ Get-Pricing($a,$b)
+            ~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-Pricing], ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-Pricing

推荐阅读