Dot-Net

PowerShell 和 StringBuilder

  • October 18, 2011

我是 PowerShell 的新手,但熟悉 .NET 類。

System.Text.StringBuilder在 PowerShell 腳本中使用。劇本是這樣的

Function MyStringFunc([String]$line) {
   $r = New-Object -TypeName "System.Collections.Generic.List``1[[System.String]]";
   $sb = New-Object -TypeName "System.Text.StringBuilder";

   foreach ($c in $line) {
       $sb.Append($c);
       $r.Add($sb.ToString());
   }

   return $r;
}

$line1 = "123";
$a = MyStringFunc $line1;
$a

我預計結果是

1
12
123

然而結果是

                 Capacity                MaxCapacity                    Length
                 --------                -----------                    ------
                       16                 2147483647                         3
123

我做錯什麼了嗎?

StringBuilder 上的一些方法(如 Append IIRC)返回 StringBuilder,因此您可以呼叫更多 StringBuilder 方法。然而 PowerShell 的工作方式是輸出所有結果(在 .NET 方法呼叫的情況下返回值)。在這種情況下,將結果轉換[void]為忽略返回值,例如:

[void]$sb.Append($c)

請注意,您不需要;在 PowerShell 中結束行。但是,如果您將多個命令放在同一行,則使用;’ 分隔這些命令。

引用自:https://stackoverflow.com/questions/7801651