1. ホーム
  2. c#

[解決済み] 演算子「+」による文字列の連結

2023-05-24 04:09:50

質問

を見ると string クラスのメタデータを見ると、演算子である ==!= がオーバーロードされている。では、どのようにして'co'の連結を行うことができるのでしょうか? + の演算子に対してどのように連結を行うことができるのでしょうか?

編集 :

Eric Lippert氏による、文字列連結に関するいくつかの興味深いメモです。

パート 1

第2部

また、その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);

(ガーン - 間接編集で誤って他の部分を削除してしまった。)

C#コンパイラがここで複数の文字列の連結があることを認識する利点は、最終的に中間文字列である x + y の連結の一部として再びコピーされる必要がないことです。 (x + y)z . その代わり、一回で全部終わらせる。

EDIT: なお、コンパイラの ができない はループの中で連結すると何もできないことに注意してください。例えば、こんなコード。

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

と同等に終わるだけです。

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

...ということで、この は多くのゴミを発生させますので、そのために StringBuilder を使うべきでしょう。私の場合は の記事で詳しく説明していますが、2つの という記事を用意していますので、そちらをご覧ください。