【发布时间】:2013-08-23 02:48:25
【问题描述】:
重要编辑:不要在这种情况下使用字典。它使用 Object.GetHashCode() 不适合用作字典键。不过,我仍然从中学到了一些东西。
我有以下声明
private static IDictionary<IDictionary<string,string>, IEnumerable<Fishtank>> _cache;
下面的代码尝试初始化它
if (_cache == null)
_cache = new Dictionary<Dictionary<string,string>, LinkedList<Fishtank>>();
我遇到的问题是初始化会产生编译时错误。
无法将类型“System.Collections.Generic.Dictionary,System.Collections.Generic.LinkedList>”隐式转换为“System.Collections.Generic.IDictionary,System.Collections.Generic.IEnumerable>”。存在显式转换(您是否缺少演员表?)
我知道 Dictionary 和 LinkedList 分别实现了 IDictionary 和 IEnumerable,所以我在这里有点茫然。
【问题讨论】:
-
这是因为 IDictionary 不支持协方差。 stackoverflow.com/questions/2149589/…
-
我明白了,我以为我总是能够转换为已实现的接口 - 感谢您提供链接
-
我添加了一个编辑,因为我发现在我所在的上下文中使用字典(作为字典键)不能正常工作
标签: c# generics casting covariance