简体   繁体   中英

powershell function parameter types

have the following function:

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

i want to build string using StringBuilder using my function for that, but i receive the following error:

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

does anybody can explain how function/function parameter/return values works in powershell?

Classic PowerShell issue. You don't use parens or comma separated args when calling commands or functions eg:

appendToSb $sb "1,"

You only use that syntax when calling .NET methods. If you use Set-StrictMode -Version 2 it will catch this sort of issue. What you passed ($sb, "1,") is how you would pass an array to a single parameter. Technically the parens aren't needed but don't change the value ie you could pass an array like this as well $sb, "," .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM