我有一个返回IDictionary<TKey, List<TValue> >的函数。我还有另一个需要IDictionary<TKey, IEnumerable<TValue> >的函数。我需要将第一个函数的返回值传递给第二个函数。编译器不想将第一个转换为第二个。那么如何将O(1)中的第一个转换为第二个呢?我总是可以写一个转换函数public static IDictionary<TKey, IEnumerable<TValue>> ToIEnumerable<TKey, TValue>(this IDictionary<TKey, List<TValue>> source){ return source.ToDictionary(s => s.Key, s => s.Value.AsEnumerable());}但是我很确定这不是O(1),更像O(log n)。这里的相关问题:Nested Interfaces: Cast IDictionary< TKey, IList< TValue > > to IDictionary< TKey, IEnumerable < TValue> >? 最佳答案 考虑你的第二个功能,那个 takes a IDictionary<TKey, IEnumerable<TValue> >现在,如果您给我一个IDictionary<TKey, IEnumerable<TValue>>,我应该能够做的一件事情就是将其中一个键的值设置为new TValue[],对吗?毕竟,TValue[]是IEnumerable<TValue>,因此它满足约束条件。但是,如果您以某种方式给我的是(在界面下方)IDictionary<TKey, List<TValue>>,则绝对不允许将键的值设置为TValue[],因为TValue[]不是!当然,这正是您所链接的问题中的问题。现在,如果您很高兴只读取我传递给您的参数,那么您可以找到从字典到List<TValue>的潜在解决方案,这有点像从键到值列表的只读字典。如果您的方法分别返回并接受ILookup<TKey, TValue>,那么当然没有问题。关于c# - 如何将IDictionary <TKey,List <TValue>>转换为IDictionary <TKey,IEnumerable <TValue>>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16033589/
10-11 08:13