替换Powershell中位置的部分字符串

时间:2016-08-23 17:48:36

标签: c# string powershell

现在我正在尝试将我的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]作为返回值。

我想让这个功能再次起作用,我该怎么办?

1 个答案:

答案 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();