コレクションから単一の文字列へ
C#でプログラミングを行う際、string.Splitで文字列を配列に分割する操作とは逆に、配列やList<T>(リスト)など、複数の要素を持つコレクションを、指定した区切り文字(デリミタ)で連結し、一つのstring(文字列)にまとめたいという場面がよくあります。
例えば、List<string>に格納された複数のIDをカンマ区切り("id1,id2,id3")の文字列に変換してログに出力したり、CSVファイルの1行を作成したりする場合です。
foreachループとStringBuilderを使って手動で連結することも可能ですが、C#にはこの操作を1行で、かつ非常に効率的に行うためのstring.Join静的メソッドが用意されています。
string.Join メソッドの基本
string.Joinメソッドは、指定されたseparator(区切り文字)を間に挟みながら、コレクション(values)のすべての要素を連結します。
基本構文: string.Join(string separator, IEnumerable<T> values)
separator: 要素と要素の間に挿入する文字列(例:", ","-","\n"など)。values: 連結したいコレクション。string[](文字列配列)だけでなく、List<string>、int[]、List<double>など、IEnumerable<T>を実装するほぼすべてのコレクションを指定できます。
コード例1: string配列の連結 (カンマ区切り)
string[](文字列の配列)に格納された複数のタグを、", "(カンマとスペース)で連結して、読みやすいリスト文字列を作成する例です。
using System;
using System.Collections.Generic;
public class StringJoinExample
{
public static void Main()
{
string[] tags = { "C#", "LINQ", ".NET", "Programming" };
// 区切り文字に ", " を指定
string result = string.Join(", ", tags);
Console.WriteLine("--- 文字列配列の連結 ---");
Console.WriteLine(result);
}
}
出力結果:
--- 文字列配列の連結 ---
C#, LINQ, .NET, Programming
コード例2: int(数値)コレクションの連結
string.Joinの強力な点は、string以外のコレクションも直接扱えることです。
int[]やList<int>を渡した場合、string.Joinは内部で各数値要素のToString()メソッドを呼び出し、それらを連結します。
int[] とハイフン区切り
int型の配列(例: [10, 20, 30])を、ハイフン(-)で連結してシリアルコードのような文字列を作成する例です。
using System;
using System.Collections.Generic;
public class NumberJoinExample
{
public static void Main()
{
// 整数 (int) の配列
int[] versionParts = { 1, 4, 10, 2 };
// 区切り文字に "-" を指定
string versionString = string.Join("-", versionParts);
Console.WriteLine("--- 数値配列の連結 ---");
Console.WriteLine($"バージョン: {versionString}");
// List<T> の場合
var scores = new List<int> { 100, 85, 92 };
string scoreReport = string.Join(" / ", scores);
Console.WriteLine($"スコア一覧: {scoreReport}");
}
}
出力結果:
--- 数値配列の連結 ---
バージョン: 1-4-10-2
スコア一覧: 100 / 85 / 92
補足:区切り文字の指定
string.Joinの第1引数(separator)はstring型であるため、","のような単一の文字だけでなく、"--->"や"\r\n"(改行)といった複数の文字からなる文字列も区切り文字として指定できます。
string[] steps = { "Step 1", "Step 2", "Step 3" };
// 区切り文字に改行 (Environment.NewLine) を使用
string processLog = string.Join(Environment.NewLine, steps);
Console.WriteLine(processLog);
出力結果:
Step 1
Step 2
Step 3
まとめ
string.Joinメソッドは、C#でコレクションの要素を一つの文字列に連結するための、最も標準的で効率的な方法です。
foreachループやStringBuilderを手動で管理する手間を省き、コードを1行で簡潔に記述できます。string型だけでなく、int型などの数値型コレクションにも直接使用できます。- CSVデータの生成、ログ出力、レポート作成など、さまざまな場面で活用できます。
