เมธอด StringBuilder.CopyTo() ใน C# ใช้คัดลอกตัวอักษรจากส่วนที่ระบุของ StringBuilder ไปยังส่วนที่ระบุของอาเรย์ char ปลายทาง
ไวยากรณ์ (Syntax)
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count);
- sourceIndex — ตำแหน่งเริ่มต้นใน StringBuilder (zero-based)
- destination — อาเรย์ char ปลายทาง
- destinationIndex — ตำแหน่งเริ่มต้นในอาเรย์ปลายทาง
- count — จำนวนตัวอักษรที่จะคัดลอก
ตัวอย่างที่ 1: คัดลอก 6 ตัวอักษรจากตำแหน่ง 3 ไปยังอาเรย์ตำแหน่ง 2
using System;
using System.Text;
public class Demo
{
public static void Main()
{
StringBuilder strBuilder = new StringBuilder("ghgh78hkjj");
char c = strBuilder[3];
Console.WriteLine("String = " + strBuilder);
Console.WriteLine("Character at index 3 = " + c);
char[] arr = new char[15];
strBuilder.CopyTo(3, arr, 2, 6);
Console.WriteLine("\nCopied String in char array...");
Console.WriteLine(arr); // แสดง char array ทั้งอาเรย์
}
}
ผลลัพธ์
String = ghgh78hkjj Character at index 3 = h Copied String in char array... h78hkj
ตัวอย่างที่ 2: คัดลอกทับอาเรย์ที่มีข้อมูลอยู่แล้ว
using System;
using System.Text;
public class Demo
{
public static void Main()
{
StringBuilder strBuilder = new StringBuilder("JohnWick");
Console.WriteLine("String = " + strBuilder);
char[] arr = new char[5] { 'a', 'b', 'c', 'd', 'e' };
strBuilder.CopyTo(1, arr, 1, 3); // คัดลอก "ohn" ไปที่ index 1
Console.WriteLine("\nCopied String in char array...");
Console.WriteLine(arr); // a + ohn + e = "aohne"
}
}
ผลลัพธ์
String = JohnWick Copied String in char array... aohne
สรุป
CopyTo()คัดลอกตัวอักษรจาก StringBuilder ไปยังchar[]ที่ระบุ — ไม่คืนค่า (void)- อาเรย์ปลายทางต้องมีขนาดเพียงพอ (
destinationIndex + count ≤ destination.Length) - StringBuilder เป็น mutable string — แก้ไขได้โดยไม่สร้างสตริงใหม่ (เหมาะกับการต่อสตริงมากครั้ง)
- คุณสมบัติ
Chars[int index](indexer) ใช้เข้าถึง/ตั้งค่าตัวอักษรตำแหน่งใดตำแหน่งหนึ่ง - เมธอดคล้ายกัน:
ToString()(แปลงเป็น string),ToString(startIndex, length)(substring),Append(),Insert(),Remove(),Replace()
เมื่อไหร่ควรใช้ StringBuilder.CopyTo()?
- ต้องการคัดลอกส่วนหนึ่งของ StringBuilder ไปยัง char array ที่มีอยู่แล้ว (reuse buffer)
- ทำงานกับ API ที่รับ char[] (native interop, file I/O, network buffers)
- ต้องการประสิทธิภาพสูง — หลีกเลี่ยงการสร้าง string/array ใหม่
- กรณีทั่วไป ใช้
ToString()หรือToString(start, len)สะดวกกว่า