クラスのメタデータを見るstring
と、演算子==
と!=
オーバーロードのみが表示されます。+
では、' '演算子の連結をどのように実行できるのでしょうか。
編集:
文字列の連結に関するEricLippertからの興味深いメモ:
パート2で参照されているJoelのスーパー記事もあります(http://www.joelonsoftware.com/articles/fog0000000319.html) 。
そうではありません-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つの詳細についての記事があります。