I toplama/dizisinin herhangi bir tür tutma IDictionary<K, S<V>>
dönüştürür bir uzantısı yöntem yazmak çalışıyorum (S<V>
) daha uygun veri yapısı olan ILookup<K, V>
için bu davalar. İdeal olarak, ben ayrı yazmak istemiyorum vbtek uzantı metodu <K, IEnumerable/IList/ıcollection <V>>
IDictionary<K, IEnumerable<V>>
IDictionary<K, List<V>>
IDictionary<K, ICollection<V>>
S
türleri ve arayüzleri üzerinde çalışmak benim uzantısı istiyorum demektir Mümkün olan her bir koleksiyon tipi için uygulama VE Ben işini yapmak için sonuç çıkarsama istiyorum.
Ne denedim geçerli:
public static ILookup<TKey, TValue>ToLookup<TKey, TCollection, TValue>(
this IDictionary<TKey, TCollection> dictionary)
where TCollection : IEnumerable<TValue>
Ama parametreler listesinde hiçbir TValue
var, bu yüzden çıkarım yazın onu anlamaya edemiyor - Ben yöntem ToLookup için tür argümanlar anlaşılmaktadır edilemez" olsun kullanım".
Bir şekilde, yöntemle sahte TValue
-tipi parametresi eklemekten başka bir şekilde çalışabilme şansı var mı? beklenen kullanım
Örnekler I her şeyden umut
mümkün ve benim tek uzatma yöntemi çağrısı sonuçlanması çağırır: Yaptığım test bitten
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();
Bunu kullandığınızda, yalnızca jenerikler için türleri açıkça belirtmeyi deneyin. – Mgetz
@Mgetz - Bence, tamamen açık tipler belirtmek veya türleri zorlamak için sahte argümanlar kullanmaktan kaçınılamaya çalışıyorum. Beklenen kullanımın örneği muhtemelen bazı şeyleri temizleyecektir. –
Evet, bahsettiğim gibi, işini yapmak için çıkarımda bulunmak istiyorum. Soruya beklenen kullanım örneklerini ekleyecektir. – NOtherDev