2016-08-23 47 views
0

現在我試圖將我的C#代碼轉換爲PowerShell腳本。替換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]作爲返回值。

我錯過了什麼讓該功能再次工作?

回答

3

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(); 
+0

謝謝你的快速解決方案! – Smartis