我试图写的扩展方法,将转换IDictionary<K, S<V>>
保持任何类型的收集/序列(S<V>
)至ILookup<K, V>
这是更适当的数据结构这些情况。这意味着,我想我的分机在不同S
类型和接口工作:单的扩展方法<K,IEnumerable的/ IList的/ ICollection的<V>>
IDictionary<K, IEnumerable<V>>
IDictionary<K, ICollection<V>>
IDictionary<K, List<V>>
等理想情况下,我不想写分开实施每种可能的收集类型并且我想要类型推断来完成它的工作。
我已经试过是:
public static ILookup<TKey, TValue>ToLookup<TKey, TCollection, TValue>(
this IDictionary<TKey, TCollection> dictionary)
where TCollection : IEnumerable<TValue>
但它在参数列表中没有TValue
,所以类型推断无法弄清楚 - 我得到“的方法ToLookup类型参数不能从推断用法“。
是否有机会以某种方式以某种方式工作,而不是向该方法添加假TValue
-type参数?
我希望所有上述预期使用量
实例调用成为可能,并导致我的一个扩展方法调用:
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();
当你使用它,尽量只指定类型的显式仿制药 – Mgetz
@Mgetz - 我认为这正是NOtherDev试图避免 - 要么指定类型的明确或有假论据来强制类型。预期使用的样本可能会清理一些事情。 –
是的,正如我所提到的,我想要类型推断来完成它的工作。将添加预期的用法示例的问题。 – NOtherDev