Tôi có một phương pháp mà chấp nhận một tham số obj loại System.ObjectCách tốt nhất để kiểm tra xem một Type là một bộ sưu tập
Bây giờ tôi muốn kiểm tra xem loại thực tế của obj là:
- Loại bộ sưu tập (IEnumerable).
- Mọi thứ khác.
Cách đầu tiên tôi nghĩ đến là:
if (obj is IEnumerable)
// obj is a collection
Nhưng System.String thực hiện IEnumerable và Tôi không muốn để điều trị chuỗi như một bộ sưu tập.
Cách thứ hai tôi nghĩ là thử nghiệm cho ICollection thay vì IEnumerable, vì IEnumerable có nhiều khả năng thu thập hơn so với thực tế. Điều này sẽ bỏ chuỗi, nhưng cũng ICollection-Of-T bởi vì nó không kế thừa ICollection (IEnumerable-Of-T là trừu tượng duy nhất bộ sưu tập chung đó là tương thích ngược - nó kế thừa IEnumerable).
Vì vậy, tôi đoán cách tốt nhất là:
if (obj is string)
// not a collection
else if (obj is IEnumerable)
// collection
else
// not a collection
Có cách nào tốt hơn?
Tôi xem có thể đếm là SEQUENCES, không phải là COLLECTIONS. Có thể có một sự khác biệt tinh tế trong ý nghĩa ở đó; vì tôi không biết ứng dụng của bạn, tôi không biết liệu đó có phải là vấn đề không. Chúng tôi phải đối mặt với vấn đề này khi thiết kế bộ khởi tạo bộ sưu tập. Có rất nhiều "bộ sưu tập" mà không thực hiện ICollection, và có rất nhiều đối tượng mà thực hiện Thêm mà không phải là bộ sưu tập. (Đối tượng toán học, thông thường.) Chúng tôi quyết định sử dụng một heuristic. Nếu một loại thực hiện cả IEnumerable và có phương thức Add public thì đó có thể là một collection. Đây là một chút ngốc nghếch, nhưng trong thực tế nó hoạt động. –
Đây là tài nguyên có liên quan tốt về tóm tắt bộ sưu tập: http://blogs.msdn.com/brada/archive/2005/01/18/355755.aspx –