文字列要素をカンマ区切りでつなげる

ペムノン
質問: カンマ区切りで結合
配列に文字列が入っていて、これをカンマ区切りでつなぎたいのです。

オールドスタイルな私は以下のコードを書きました。
20年前なら、このコードでも良いかと思いますが、最新の環境であればシンプルでもっと良い書き方があるのではと思います。どうなのでしょう?

元のコード

private void button1_Click(object sender, EventArgs e)
{
  string[] items = {"ぺんぎんクッキー", "らくだキャラメル", "しろくまアイス", "かるがもサブレ", "もーもー珈琲牛乳"};

  string result = "";
  for (int i=0;i<items.Length; i++){
    result += items[i]+", ";
  }

  if (result.Length > 2)
  {
    result = result.Substring(0, result.Length - 2);
  }
  textBox1.Text = result;
}

または

private void button1_Click(object sender, EventArgs e)
{
  string[] items = {"ぺんぎんクッキー", "らくだキャラメル", "しろくまアイス", "かるがもサブレ", "もーもー珈琲牛乳"};
  
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < items.Length; i++) {
    sb.Append(items[i]);
    sb.Append(", ");
  }

  if (sb.Length > 2) sb.Length -= 2;

  textBox1.Text = sb.ToString();
}

方針

要素を指定した文字列でつなぐ場合には、String.Join() メソッドを利用するのがパフォーマンス的にも記述のシンプルさでも良いです。

プログラム例

UI

以下のフォームを作成します。テキストボックスとボタンを1つずつ配置します。
文字列要素をカンマ区切りでつなげる:画像1

コード

以下のコードを記述します。

private void button1_Click(object sender, EventArgs e)
{
  string[] items = {"ぺんぎんクッキー", "らくだキャラメル", "しろくまアイス", "かるがもサブレ", "もーもー珈琲牛乳"};

  textBox1.Text = String.Join(", ",items);
}

実行結果

プロジェクトを実行します。下図のウィドウが表示されます。
文字列要素をカンマ区切りでつなげる:画像2

[button1]をクリックします。下図の結果となります。
文字列要素をカンマ区切りでつなげる:画像3

末尾のカンマは無しの結果になります。

ぺんぎんクッキー, らくだキャラメル, しろくまアイス, かるがもサブレ, もーもー珈琲牛乳

補足: そんなのわからない

ペムノン
質問: そんなの知らないよ
すごいですね。String.Join() これは便利そうです。でも、知らなければ使えないですよね?
今後、僕はどうしていけばよいのでしょうか?


便利なメソッドはいろいろありますが、知らなければ、使えないのはその通りです。 良い対策として、記述したコードをLLMにレビューしてもらう方法があります。

プロンプトの例
以下のコードをレビューしてもらえますか。

(ここに記述したコードを記載)


今回のコードをClaude Opus 4.5にレビューしてもらう例です。

以下のコードをレビューしてもらえますか。

private void button1_Click(object sender, EventArgs e)
{
  string[] items = {"ぺんぎんクッキー", "らくだキャラメル", "しろくまアイス", "かるがもサブレ", "もーもー珈琲牛乳"};

  string result = "";
  for (int i=0;i<items.Length; i++){
    result += items[i]+", ";
  }

  if (result.Length > 2)
  {
    result = result.Substring(0, result.Length - 2);
  }
  textBox1.Text = result;
}
Claude Opus 4.5 の回答
問題点
1. 文字列連結のパフォーマンス
ループ内で += による文字列連結は、毎回新しい文字列オブジェクトを生成するため、配列が大きくなると非効率です。
2. 末尾のカンマ処理が冗長
ループ後に末尾の , を削除する処理は、string.Join を使えば不要になります。

改善案
private void button1_Click(object sender, EventArgs e)
{
    string[] items = { "ぺんぎんクッキー", "らくだキャラメル", "しろくまアイス", "かるがもサブレ", "もーもー珈琲牛乳" };

    textBox1.Text = string.Join(", ", items);
}
変更点の説明
変更点理由
string.Join を使用区切り文字付きの連結を1行で実現でき、末尾処理も不要
中間変数 result を削除コードがシンプルになり、可読性が向上
string.Join は内部で効率的に処理されるため、パフォーマンス面でも優れています。要素数が多い場合は StringBuilder も選択肢ですが、この規模であれば string.Join で十分です。


string.join を利用するコードを提案してもらえました。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2025-12-28