2013-10-03 73 views
3

具有以下功能:PowerShell的函數參數類型

function appendToSB([System.Text.StringBuilder]$sb, 
        [string]$value){ 
    [void]$sb.append($value) 
    $sb 
} 

$sb = new-object -typename system.text.stringbuilder 
$sb = appendToSb($sb, "1,") 

$sb.tostring() | out-host 

我想用使用StringBuilder的我該功能來構建字符串,但我收到以下錯誤:

appendToSB : Cannot process argument transformation on parameter 'sb'. Cannot convert the "System.Object[]" value of ty pe "System.Object[]" to type "System.Text.StringBuilder". At E:\powershell\test.ps1:8 char:11 + appendToSb([system.text.stringbuilder]$sb, "1,") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [appendToSB], ParameterBindingArgumentTransformationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,appendToSB

沒有任何人可以解釋函數/函數參數/返回值如何在PowerShell中工作?

回答

12

經典的PowerShell問題。調用命令或函數時,不要使用parens或逗號分隔的參數。例如:

appendToSb $sb "1," 

您只能在調用.NET方法時使用該語法。如果你使用Set-StrictMode -Version 2它會遇到這樣的問題。你傳遞了什麼($ sb,「1,」)是你將數組傳遞給單個參數的方式。從技術上來說,parens不是必需的,但不會改變數值,即你也可以像這樣傳遞一個數組。$sb, ","