2010-08-08 20 views
7

Dưới đây là chiến lược của tôi cho lựa chọn mà loại C# sưu tập sử dụng:Điều gì đang thiếu trong chiến lược lựa chọn bộ sưu tập C# nào để sử dụng?

  • nếu số hạng mục trong bộ sưu tập là cố định, sau đó sử dụng một mảng, ví dụ:

    string [] hướng = new string [] { "Bắc Nam Đông Tây" };

  • khác luôn luôn sử dụng List<T>

  • tất nhiên trừ khi bạn cần có một bộ sưu tập chuyên biệt hơn, ví dụ Stack<T>, Queue<T>, or Dictionary<TKey, TValue>

  • nhưng không bao giờ sử dụng ArrayList nữa

Dựa trên kinh nghiệm của mình, những gì là mất tích từ chiến lược này?

+0

Không chắc chắn vì sao đây là wiki cộng đồng? –

+0

Tôi nghĩ đó là một nghi thức tốt để đánh dấu các câu hỏi về ý kiến ​​như cộng đồng wiki. Có thực sự không phải là một câu trả lời cụ thể cho câu hỏi này, tôi chỉ muốn đưa chiến lược của tôi ra khỏi đó và xem dựa trên kinh nghiệm của người khác, nếu có bất cứ điều gì còn thiếu mà tôi nên biết. –

+0

Việc tôi thực hiện nó là nếu có câu trả lời sai trái, nó không thuộc về cộng đồng wiki. –

Trả lời

5

Tôi muốn nói rằng trong phần lớn các trường hợp, ngay cả khi tôi biết số lượng mục trong bộ sưu tập, tôi sẽ sử dụng Danh sách, chỉ đơn giản là số chức năng tiện ích mà nó cung cấp và khả năng tương thích với LINQ.

Hashmaps là một trường hợp sử dụng quan trọng, khi bạn muốn truy cập nhanh hơn vào các mục trong bộ sưu tập.

7

Quy tắc của bạn hoạt động tốt.

Ngoài ra:

  • Luôn perfer bộ sưu tập chung (hoặc chuyên ngành) trong ungeneric (object dựa trên) người.
  • Sử dụng HashSet<T> nếu bạn muốn kiểm tra sự tồn tại thay vì ánh xạ khóa-giá trị (được biểu thị qua Dictionary).
  • Trong trường hợp từ điển, hãy xem xét việc sử dụng bản đồ đặt hàng (SortedList<...>, SortedDictionary<...>) nếu đặt hàng có vẻ quan trọng.
  • Sử dụng danh sách được liên kết nếu bạn xóa/chèn hoạt động ở giữa.

và tất nhiên là quan trọng nhất:

  • Chưa bao giờ xuất khẩu các loại bộ sưu tập cụ thể: Luôn luôn sử dụng giao diện chung nhất, đó là - trong hầu hết các trường hợp - IList<T> hoặc IEnumerable<T>.
1

Bạn cũng có thể sử dụng Collection<T> nếu bạn có kế hoạch ghi đè các phương thức thêm/xóa/xóa trong lớp kế thừa vì có phương pháp ảo.

Các vấn đề liên quan