现在我正在尝试将我的C#
代码转换为PowerShell
脚本。
C#
中的实际功能如下:
private static string ReplaceStringPartAt(string mainstring, int position, string replacement)
{
StringBuilder strBuilder = new StringBuilder(mainstring);
strBuilder.Remove(position, replacement.Length);
strBuilder.Insert(position, replacement);
return strBuilder.ToString();
}
我的PowerShell
功能如下:
function ReplaceStringPartAt($mainstring, $position, $replacement)
{
$strBuilder = New-Object System.Text.StringBuilder;
$strBuilder.AppendLine($mainstring)
$strBuilder.Remove($position, $replacement.Length);
$strBuilder.Insert($position, $replacement);
return $strBuilder.ToString();
}
但我总是以[System.Text.StringBuilder]
作为返回值。
我想让这个功能再次起作用,我该怎么办?
答案 0 :(得分:4)
StringBuilder
class的许多方法返回相同的StringBuilder
实例,因此您可以将多个调用链接在一起。这在C#中是无害的,但在PowerShell中,您需要显式捕获这些返回值,以便它们不会出现在您的函数输出中。您可以将它们传输到Out-Null
...
$strBuilder.AppendLine($mainstring) | Out-Null
$strBuilder.Remove($position, $replacement.Length) | Out-Null;
$strBuilder.Insert($position, $replacement) | Out-Null;
...或将它们投放到[Void]
...
[Void] $strBuilder.AppendLine($mainstring)
[Void] $strBuilder.Remove($position, $replacement.Length);
[Void] $strBuilder.Insert($position, $replacement);
...或将所有通话(包括.ToString()
)连在一起......
return $strBuilder.AppendLine($mainstring) `
.Remove($position, $replacement.Length) `
.Insert($position, $replacement) `
.ToString();