具有以下功能:
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'上的参数转换。 无法转换ty“System.Object []”的“System.Object []”值 键入“System.Text.StringBuilder”。在E:\ powershell \ test.ps1:8 焦炭:11 + appendToSb([system.text.stringbuilder] $ sb,“1,”) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidData:(:) [appendToSB],ParameterBindingArgumentTransformationException + FullyQualifiedErrorId:ParameterArgumentTransformationError,appendToSB
有人能解释函数/函数参数/返回值在powershell中是如何工作的吗?
答案 0 :(得分:13)
经典PowerShell问题。调用命令或函数时,不要使用parens或逗号分隔的args:
appendToSb $sb "1,"
您只在调用.NET方法时使用该语法。如果您使用Set-StrictMode -Version 2
,它将会遇到此类问题。您传递的内容($ sb,“1”,“)是将数组传递给单个参数的方式。从技术上讲,不需要parens但不改变值,即你可以传递像这样的数组$sb, ","
。