เมธอด String.Join() ใน C#
String.Join() ใช้รวมองค์ประกอบในอาร์เรย์หรือคอลเลกชันสตริงเข้าด้วยกัน โดยใส่ตัวคั่น (separator) ระหว่างแต่ละองค์ประกอบ อยู่ใน namespace System
Syntax
// พื้นฐาน
public static string Join(string separator, string[] values);
// Generic (รองรับ IEnumerable)
public static string Join(string separator, IEnumerable values);
// ระบุช่วง (Subarray)
public static string Join(string separator, string[] value, int startIndex, int count);
ตัวอย่างพื้นฐาน
using System;
namespace StringApplication
{
class StringProg
{
static void Main(string[] args)
{
string[] starray = new string[]
{
"Down the way nights are dark",
"And the sun shines daily on the mountaintop",
"I took a trip on a sailing ship",
"And when I reached Jamaica",
"I made a stop"
};
// รวมด้วย newline
string str = String.Join("\n", starray);
Console.WriteLine(str);
}
}
}
ผลลัพธ์
Down the way nights are dark
And the sun shines daily on the mountaintop
I took a trip on a sailing ship
And when I reached Jamaica
I made a stop
ตัวอย่างเพิ่มเติม
1. รวมด้วยคอมมาและช่องว่าง
string[] fruits = { "Apple", "Banana", "Orange", "Mango" };
string csv = String.Join(", ", fruits);
Console.WriteLine(csv); // Apple, Banana, Orange, Mango
2. รวม List<T> และ IEnumerable
var numbers = new List { 1, 2, 3, 4, 5 };
string joined = String.Join(" - ", numbers); // "1 - 2 - 3 - 4 - 5"
// LINQ + Join
var evenJoined = String.Join(", ", numbers.Where(n => n % 2 == 0)); // "2, 4"
3. รวม Object ด้วย ToString()
class Person { public string Name; public int Age; }
var people = new List
{
new Person { Name = "Alice", Age = 25 },
new Person { Name = "Bob", Age = 30 }
};
string names = String.Join(", ", people.Select(p => p.Name)); // "Alice, Bob"
4. ใช้กับ StringBuilder (ประสิทธิภาพดีกว่าสำหรับข้อมูลเยอะ)
var sb = new System.Text.StringBuilder();
string[] largeArray = new string[10000];
// ... fill array
string result = String.Join(",", largeArray); // OK แต่ StringBuilder.Join เร็วกว่าในบางกรณี
String.Join vs String.Concat vs +
| วิธี | ใช้เมื่อ | ประสิทธิภาพ |
|---|---|---|
String.Join | มีตัวคั่น, รวมหลายค่า | ดี (allocate ครั้งเดียว) |
String.Concat | ต่อติดกันโดยไม่มีตัวคั่น | ดี |
+ หรือ += | ต่อสตริงน้อย (ไม่เกิน 5-10) | ช้า (สร้างสตริงใหม่ทุกครั้ง) |
StringBuilder | ต่อสตริงเยอะ/ในลูป | ดีที่สุด |
Path.Join (สำหรับ File Path)
using System.IO;
string path = Path.Join("C:", "Users", "Documents", "file.txt");
// Windows: C:\Users\Documents\file.txt
// Linux: C:/Users/Documents/file.txt