gpt4 book ai didi

c# - 如何将 IDictionary> 转换为 IDictionary>?

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:44 26 4
gpt4 key购买 nike

我有一个返回 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> 的潜在解决方案。 ,这有点像从键到值的列表只读字典。如果您的方法分别返回并接受 ILookup<TKey, TValue>当然没有问题。

关于c# - 如何将 IDictionary<TKey, List<TValue>> 转换为 IDictionary<TKey, IEnumerable<TValue>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16033589/

26 4 0