C# 无法从非协变泛型接口隐式转换类型

C# 无法从非协变泛型接口隐式转换类型,c#,generics,casting,covariance,C#,Generics,Casting,Covariance,重要编辑:请勿在此上下文中使用词典。它使用Object.GetHashCode(),这不适合用作字典键。不过我还是从中学到了一些东西 我有以下声明 private static IDictionary<IDictionary<string,string>, IEnumerable<Fishtank>> _cache; 私有静态IDictionary\u缓存; 和下面的代码尝试初始化它 if (_cache == null) _cache = new

重要编辑:请勿在此上下文中使用词典。它使用Object.GetHashCode(),这不适合用作字典键。不过我还是从中学到了一些东西

我有以下声明

private static IDictionary<IDictionary<string,string>, IEnumerable<Fishtank>> _cache;
私有静态IDictionary\u缓存;
和下面的代码尝试初始化它

if (_cache == null) 
  _cache = new Dictionary<Dictionary<string,string>, LinkedList<Fishtank>>(); 
if(_cache==null)
_cache=新字典();
我遇到的问题是初始化会生成编译时错误

无法将类型“System.Collections.Generic.Dictionary,System.Collections.Generic.LinkedList>”隐式转换为“System.Collections.Generic.IDictionary,System.Collections.Generic.IEnumerable>”。存在显式转换(是否缺少强制转换?)

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

您可以执行以下操作

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

这是因为IDictionary不支持协方差。我明白了,我原以为我总是能够转换到一个实现的接口——感谢链接我添加了一个编辑,因为我发现在我的上下文中使用字典(作为字典键)不能正常工作