2016-08-23 16 views
0

今すぐC#コードをPowerShellスクリプトに変換しようとしています。このようなPowershellの位置で文字列の一部を置き換える

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機能:C#

私の実際の関数は次のようになります

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では関数出力に表示されないように、これらの戻り値を明示的に取得する必要があります。あなたが一緒に(.ToString()を含む)の呼び出しのすべて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); 

...またはチェーン。 ..

return $strBuilder.AppendLine($mainstring) ` 
    .Remove($position, $replacement.Length) ` 
    .Insert($position, $replacement) ` 
    .ToString(); 
+0

あなたの高速ソリューションをありがとう! – Smartis

関連する問題