Tôi đang cố gắng viết một phương pháp mở rộng sẽ chuyển đổi IDictionary<K, S<V>>
giữ bất kỳ loại bộ sưu tập/chuỗi nào (S<V>
) thành ILookup<K, V>
. những trường hợp đó. Điều này có nghĩa tôi muốn mở rộng của tôi để làm việc trên S
loại và các giao diện khác nhau:Phương pháp mở rộng đơn trên IDictionary <K, IEnumerable/IList/ICollection <V>>
IDictionary<K, IEnumerable<V>>
IDictionary<K, ICollection<V>>
IDictionary<K, List<V>>
vv Lý tưởng nhất, tôi không muốn viết riêng thực hiện cho từng loại bộ sưu tập có thể VÀ tôi muốn suy luận kiểu để thực hiện công việc của mình.
Những gì tôi đã cố gắng là:
public static ILookup<TKey, TValue>ToLookup<TKey, TCollection, TValue>(
this IDictionary<TKey, TCollection> dictionary)
where TCollection : IEnumerable<TValue>
Nhưng nó không có TValue
trong danh sách các thông số, vì vậy gõ suy luận là không thể hình dung nó ra - tôi nhận được "Những lập luận kiểu cho phương pháp ToLookup không thể được suy ra từ việc sử dụng".
Có khả năng nó có thể hoạt động bằng cách nào đó khác hơn là thêm thông số giả mạo TValue
giả mạo vào phương pháp?
Ví dụ về việc sử dụng dự kiến
Tôi hy vọng tất cả trên cuộc gọi đến có thể và kết quả là một cuộc gọi đến phương pháp mở rộng duy nhất của tôi:
var dictOfIEnumerables = new Dictionary<int, IEnumerable<int>>();
var lookupFromIEnumerables = dictOfIEnumerables.ToLookup();
var dictOfICollections = new Dictionary<int, ICollection<int>>();
var lookupFromICollections = dictOfICollections.ToLookup();
var dictOfLists = new Dictionary<int, List<int>>();
var lookupFromLists = dictOfLists.ToLookup();
Khi bạn sử dụng nó, hãy thử chỉ định rõ ràng các loại cho generics – Mgetz
@Mgetz - Tôi nghĩ đó chính xác là những gì NOtherDev cố gắng tránh - hoặc chỉ rõ các kiểu rõ ràng hoặc có đối số giả để ép buộc loại. Mẫu của việc sử dụng dự kiến có thể sẽ xóa mọi thứ. –
Vâng, như tôi đã đề cập, tôi muốn suy luận kiểu để thực hiện công việc của mình. Sẽ thêm các ví dụ sử dụng dự kiến vào câu hỏi. – NOtherDev