.NET cung cấp một vùng chứa danh sách chung có hiệu suất gần như giống nhau (xem câu hỏi Hiệu suất của Mảng so với Danh sách). Tuy nhiên chúng khá khác nhau trong việc khởi tạo.
Mảng rất dễ khởi tạo với giá trị mặc định và theo định nghĩa thì chúng đã có kích thước nhất định:
string[] Ar = new string[10];
Điều này cho phép một người chỉ định các mục ngẫu nhiên một cách an toàn, giả sử:
Ar[5]="hello";
với danh sách mọi thứ phức tạp hơn. Tôi có thể thấy hai cách thực hiện cùng một lần khởi tạo, cả hai cách đều không được bạn gọi là thanh lịch:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
hoặc là
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Cách nào sẽ sạch hơn?
CHỈNH SỬA: Các câu trả lời cho đến nay đề cập đến dung lượng, một cái gì đó khác với việc điền trước một danh sách. Ví dụ, trên một danh sách vừa tạo với dung lượng 10, người ta không thể làmL[2]="somevalue"
CHỈNH SỬA 2: Mọi người thắc mắc tại sao tôi muốn sử dụng danh sách theo cách này, vì nó không phải là cách chúng được dự định sử dụng. Tôi có thể thấy hai lý do:
Người ta có thể lập luận khá thuyết phục rằng danh sách là mảng "thế hệ tiếp theo", thêm tính linh hoạt mà hầu như không bị phạt. Do đó người ta nên sử dụng chúng theo mặc định. Tôi chỉ ra rằng chúng có thể không dễ khởi tạo.
Những gì tôi hiện đang viết là một lớp cơ sở cung cấp chức năng mặc định như một phần của một khuôn khổ lớn hơn. Trong chức năng mặc định mà tôi cung cấp, kích thước của Danh sách được biết đến ở mức nâng cao và do đó tôi có thể đã sử dụng một mảng. Tuy nhiên, tôi muốn cung cấp cho bất kỳ lớp cơ sở nào cơ hội để tự động mở rộng nó và do đó tôi chọn một danh sách.
List
không phải là một thay thế cho Array
. Họ giải quyết các vấn đề riêng biệt rõ ràng. Nếu bạn muốn một kích thước cố định, bạn muốn một Array
. Nếu bạn sử dụng a List
, bạn đang làm sai.