87

クラスのメタデータを見るstringと、演算子==!=オーバーロードのみが表示されます。+では、' '演算子の連結をどのように実行できるのでしょうか。

編集

文字列の連結に関するEricLippertからの興味深いメモ:

パート1

パート2

パート2で参照されているJoelのスーパー記事もあります(http://www.joelonsoftware.com/articles/fog0000000319.html) 。

4

1 に答える 1

145

そうではありません-C#コンパイラはそうします:)

したがって、このコード:

string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;

実際には次のようにコンパイルされます:

string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);

(Gah-途中の編集で他のビットが誤って削除されました。)

ここに複数の文字列連結があることに気付くC#コンパイラの利点は、とx + yの連結の一部として再度コピーする必要がある中間文字列を作成することにならないことです。代わりに、すべてを一度に実行します。(x + y)z

編集:ループで連結すると、コンパイラは何もできないことに注意してください。たとえば、次のコードは次のとおりです。

string x = "";
foreach (string y in strings)
{
    x += y;
}

最終的には次のものと同等になります。

string x = "";
foreach (string y in strings)
{
    x = string.Concat(x, y);
}

...したがって、これ大量のガベージを生成します。そのため、このStringBuilderような場合にを使用する必要があります。うまくいけばさらなる質問に答えるであろう2つの詳細についての記事があります。

于 2012-04-26T20:47:43.113 に答える