【问题标题】:Cannot implicitly convert type from non-covariant generic interface无法从非协变泛型接口隐式转换类型
【发布时间】: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


【解决方案1】:

你可以这样做

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多