4

具有以下功能:

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:无法处理参数“sb”的参数转换。无法将“System.Object[]”类型的“System.Object[]”值转换为“System.Text.StringBuilder”类型。在 E:\powershell\test.ps1:8 char:11 + appendToSb([system.text.stringbuilder]$sb, "1,") + ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [appendToSB], ParameterBindingArgumentTransformationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,appendToSB

有人可以解释函数/函数参数/返回值在powershell中是如何工作的吗?

4

1 回答 1

15

经典的 PowerShell 问题。调用命令或函数时不要使用括号或逗号分隔的参数,例如:

appendToSb $sb "1,"

只有在调用 .NET 方法时才使用该语法。如果你使用Set-StrictMode -Version 2它会发现这类问题。您传递的 ($sb, "1,") 是将数组传递给单个参数的方式。从技术上讲,不需要括号,但不要更改值,即您也可以传递这样的数组$sb, ","

于 2013-10-03T23:23:52.020 回答