79
Chương 2: Thao tác dữ liệu
Để sắp xếp các đối tượng không hiện thực
IComparable
, bạn cần truyền cho phương thức
Sort
một đối tượng hiện thực giao diện
System.Collections.IComparer
. Hiện thực của
IComparer
phải có khả năng so sánh các đối tượng nằm trong mảng hoặc
ArrayList
(xem mục 16.3 để
biết cách hiện thực
IComparable
và
IComparer
).
10.
10.
Chép m t t p h p vào m t m ng
ộ ậ ợ
ộ ả
Chép m t t p h p vào m t m ng
ộ ậ ợ
ộ ả
Bạn cần chép nội dung của một tập hợp vào một mảng.
Sử dụng phương thức
ICollection.CopyTo
(được hiện thực bởi tất cả các lớp tập
hợp), hoặc sử dụng phương thức
ToArray
(được hiện thực bởi các tập hợp
ArrayList
,
Stack
,
Queue
).
Các phương thức
ICollection.CopyTo
và
ToArray
có cùng chức năng, chúng chép các phần tử
trong một tập hợp vào một mảng. Sự khác biệt nằm ở chỗ
CopyTo
chép vào một mảng đã có,
trong khi
ToArray
tạo ra một mảng mới rồi chép vào đó.
CopyTo
nhận hai đối số: một mảng và một chỉ số. Mảng này là đích của quá trình sao chép và
phải có kiểu tương thích với các phần tử của tập hợp. Nếu kiểu không tương thích hay không
có sự chuyển đổi ngầm từ kiểu phần tử của tập hợp sang kiểu phần tử của mảng thì ngoại lệ
System.InvalidCastException
sẽ bị ném. Chỉ số là một vị trí trong mảng mà bắt đầu từ đó các
phần tử của tập hợp sẽ được chép vào. Nếu chỉ số này lớn hơn hoặc bằng chiều dài của mảng,
hoặc số phần tử của tập hợp vượt quá sức chứa của mảng thì ngoại lệ
System.ArgumentException
sẽ bị ném. Đoạn mã sau minh họa cách sử dụng
CopyTo
để chép
nội dung của một
ArrayList
vào một mảng:
// Tạo một ArrayList mới và thêm phần tử vào.
ArrayList list = new ArrayList(5);
list.Add("Phuong");
list.Add("Phong");
list.Add("Nam");
list.Add("Tam");
list.Add("Nhan");
// Tạo một string[] và sử dụng ICollection.CopyTo
// để chép nội dung của ArrayList.
string[] array1 = new string[5];
list.CopyTo(array1,0);
Các lớp
ArrayList
,
Stack
, và
Queue
cũng hiện thực phương thức
ToArray
, phương thức này tự
động tạo một mảng với kích thước đủ để chứa các phần tử của của tập hợp. Nếu bạn không
truyền đối số cho
ToArray
, nó sẽ trả về một
object[]
bất chấp kiểu của các đối tượng trong
tập hợp. Tuy nhiên, bạn có thể truyền một đối tượng
System.Type
để chỉ định kiểu của mảng
(Bạn phải ép mảng kiểu mạnh về đúng kiểu). Ví dụ sau minh họa cách sử dụng
ToArray
cho
ArrayList
ở trên: