Giới thiệu
Phương thức CopyTo() của lớp String sao chép một đoạn con của chuỗi hiện tại vào mảng ký tự Unicode (char[]) tại vị trí chỉ định. Đây là cách hiệu quả để trích xuất phần chuỗi vào buffer ký tự có sẵn.
Cú pháp
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count);
- sourceIndex: Vị trí bắt đầu trong chuỗi nguồn (0-based).
- destination: Mảng char đích.
- destinationIndex: Vị trí bắt đầu ghi trong mảng đích.
- count: Số ký tự cần copy.
Ví dụ 1
using System;
public class Demo
{
public static void Main()
{
string str = "JohnAndJacob";
Console.WriteLine("Chuỗi = " + str);
char[] destArr = new char[20];
// Copy 4 ký tự từ vị trí 1 ("ohnA") vào destArr từ vị trí 0
str.CopyTo(1, destArr, 0, 4);
Console.Write("Mảng đích: ");
Console.WriteLine(destArr); // In: ohnA (các phần tử còn lại là '\0')
}
}
Kết quả
Chuỗi = JohnAndJacob Mảng đích: ohnA
Ví dụ 2 - Copy vào mảng đã có dữ liệu
using System;
public class Demo
{
public static void Main()
{
string str = "JohnAndJacob";
Console.WriteLine("Chuỗi = " + str);
char[] destArr = new char[20];
// Khởi tạo mảng đích
destArr[0] = 'A';
destArr[1] = 'B';
destArr[2] = 'C';
destArr[3] = 'D';
Console.WriteLine("Mảng đích ban đầu: " + new string(destArr)); // "ABCD........"
// Copy 4 ký tự từ vị trí 2 ("hnAn") vào destArr từ vị trí 3
str.CopyTo(2, destArr, 3, 4);
Console.Write("Mảng đích sau CopyTo: ");
Console.WriteLine(destArr); // "ABC" + "hnAn" + phần còn lại
}
}
Kết quả
Chuỗi = JohnAndJacob Mảng đích ban đầu: ABCD Mảng đích sau CopyTo: ABChnAn
Lưu ý quan trọng
- Phương thức không trả về giá trị (void), ghi trực tiếp vào mảng đích.
- Ném
ArgumentOutOfRangeExceptionnếu chỉ số vượt phạm vi. - Ném
ArgumentNullExceptionnếu mảng đích là null. - Khác với
ToCharArray()tạo mảng mới,CopyTo()ghi vào mảng có sẵn (tái sử dụng buffer). - Để copy toàn bộ chuỗi:
str.CopyTo(0, dest, 0, str.Length)hoặc dùngstr.ToCharArray().