Nếu mã của bạn chỉ đơn giản là lặp qua chuỗi bên trong phương pháp này (không thêm, xóa, hoặc truy cập bởi chỉ số), thay đổi phương thức của bạn với một trong những
DoSomething(IEnumerable<IMyInterface> sequence)
DoSomething<T>(IEnumerable<T> sequence) where T : IMyInterface
Giao diện IEnumerable<>
Sau đây là hiệp biến (như của .NET 4) (tùy chọn đầu tiên). Hoặc bạn có thể sử dụng chữ ký sau nếu sử dụng C# 3.
Nếu không, nếu bạn cần các hoạt động được lập chỉ mục, hãy chuyển đổi danh sách trước khi chuyển nó. Trong lời gọi, bạn có thể có
// invocation using existing method signature
DoSomething(yourList.Cast<IMyInterface>().ToList());
// or updating method signature to make it generic
DoSomething<T>(IList<T> list) where T : IMyInterface
gì chữ ký sau này sẽ cho phép bạn làm là cũng để hỗ trợ thêm hoặc loại bỏ vào danh sách (có thể nhìn thấy tại callsite), và nó cũng sẽ cho phép bạn sử dụng danh sách mà không đầu tiên sao chép nó.
Ngay cả khi vẫn còn, nếu tất cả những gì bạn làm là lặp qua danh sách trong một vòng lặp, tôi sẽ ưu tiên một phương pháp acceping IEnumerable<>
.
Nguồn
2011-10-03 02:21:59
mã của bạn là gì? – talnicolas