เมธอด string.Join(separator, values) ใช้รวมสตริงหลายสตริงเป็นสตริงเดียว โดยคั่นด้วย Separator ที่ระบุ (เช่น Comma, Space, Newline) ทำงานได้กับ Array, List, IEnumerable ทุกชนิด
รูปแบบการใช้งาน
List items = new List { "water", "food", "air" };
string result = string.Join(", ", items); // "water, food, air"
โค้ดตัวอย่างสมบูรณ์
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo
{
public static void Main()
{
List items = new List { "water", "food", "air" };
Console.WriteLine("ลิสต์ต้นฉบับ:");
foreach (var item in items) Console.WriteLine($" {item}");
// รวมด้วย Comma
string commaSeparated = string.Join(", ", items);
Console.WriteLine($"\nComma-separated: {commaSeparated}");
// รวมด้วย Separator อื่นๆ
Console.WriteLine($"\nPipe-separated: {string.Join(" | ", items)}");
Console.WriteLine($"Space-separated: {string.Join(" ", items)}");
Console.WriteLine($"Newline-separated:\n{string.Join("\n", items)}");
Console.WriteLine($"Semicolon: {string.Join("; ", items)}");
// กับ Array
string[] array = { "Red", "Green", "Blue" };
Console.WriteLine($"\nArray: {string.Join(", ", array)}");
// กับ IEnumerable (LINQ)
var filtered = items.Where(s => s.Length > 3);
Console.WriteLine($"Filtered (>3 chars): {string.Join(", ", filtered)}");
// กับ Object (ใช้ ToString)
var numbers = new List { 1, 2, 3, 4, 5 };
Console.WriteLine($"\nNumbers: {string.Join(", ", numbers)}");
// Custom formatting กับ Object
var people = new[]
{
new { Name = "John", Age = 25 },
new { Name = "Jane", Age = 30 }
};
string peopleStr = string.Join(", ", people.Select(p => $"{p.Name}({p.Age})"));
Console.WriteLine($"People: {peopleStr}");
}
}
ผลลัพธ์
ลิสต์ต้นฉบับ:
water
food
air
Comma-separated: water, food, air
Pipe-separated: water | food | air
Space-separated: water food air
Newline-separated:
water
food
air
Semicolon: water; food; air
Array: Red, Green, Blue
Filtered (>3 chars): water, food
Numbers: 1, 2, 3, 4, 5
People: John(25), Jane(30)
Join vs StringBuilder vs String.Concat
| เมธอด | เหมาะสำหรับ | Separator | ประสิทธิภาพ |
|---|---|---|---|
string.Join | รวม Collection ด้วย Separator | ได้ | ดี (Allocate ครั้งเดียว) |
StringBuilder | สร้างสตริงซับซ้อน/วนลูป | ควบคุมเอง | ดีมาก (Mutable) |
string.Concat | ต่อสตริง 2-4 ตัว | ไม่มี | ดีสำหรับน้อย |
+ Operator | ต่อสตริงเล็กน้อย | ไม่มี | สร้าง Object ใหม่ทุกครั้ง |
การใช้งานจริง
1. สร้าง CSV Line
var columns = new[] { "Name", "Age", "City" };
string header = string.Join(",", columns); // "Name,Age,City"
var row = new[] { "John", "25", "Bangkok" };
string data = string.Join(",", row); // "John,25,Bangkok"
2. สร้าง SQL IN Clause
int[] ids = { 1, 2, 3, 4, 5 };
string inClause = string.Join(",", ids); // "1,2,3,4,5"
string sql = $"SELECT * FROM Users WHERE Id IN ({inClause})";
3. สร้าง Query String
var parameters = new Dictionary
{
{ "page", "1" }, { "size", "20" }, { "sort", "name" }
};
string queryString = string.Join("&", parameters.Select(kvp => $"{kvp.Key}={kvp.Value}"));
// "page=1&size=20&sort=name"
4. Join กับ Null/Empty Handling
string[] items = { "A", null, "B", "", "C" };
// Join ปกติ (null → empty string)
Console.WriteLine(string.Join(",", items)); // "A,,B,,C"
// กรอง Null/Empty
Console.WriteLine(string.Join(",", items.Where(s => !string.IsNullOrEmpty(s)))); // "A,B,C"
ข้อควรระวัง
string.Joinไม่โยน Exception หาก Collection ว่าง - คืน Empty String- Null Element ใน Collection จะถูกแปลงเป็น Empty String (ไม่ใช่ "null")
- สำหรับ Performance สูงสุด ใช้
string.Joinแทนการ + ใน Loop - Overload ที่รับ
params string[]ใช้ได้กับจำนวนนิ่ง ส่วนIEnumerable<string>ใช้กับ Collection