无法从非协变通用接口隐式转换类型

时间:2013-08-23 02:48:25

标签: c# generics casting covariance

重要编辑:请勿在此上下文中使用词典。它使用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&gt;'到'System.Collections.Generic.IDictionary,System.Collections.Generic.IEnumerable&gt;'。存在显式转换(您是否错过了演员?)

我知道Dictionary和LinkedList分别实现了IDictionary和IEnumerable,所以我在这里有点不知所措。

1 个答案:

答案 0 :(得分:3)

你可以这样做

if (_cache == null) 
    _cache = new Dictionary<IDictionary<string, string>, IEnumerable<Fishtank>>();