Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การรวมสตริงหลายสตริงเป็นสตริงเดียวคั่นด้วย Comma ใน C#

เมธอด 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