首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dictionary<int、List<T>>和IDictionary<int、IEnumerable<T>>之间没有赋值兼容性吗?

Dictionary<int、List<T>>和IDictionary<int、IEnumerable<T>>之间没有赋值兼容性吗?
EN

Stack Overflow用户
提问于 2013-01-29 11:08:11
回答 2查看 448关注 0票数 2

我正在尝试将一个Dictionary<int, List<T>>传递给一个需要IDictionary<int, IEnumerable<T>>的构造函数。

不幸的是,通用IDictionary没有被定义为IDictionary<TKey, out TValue>。也许这没有什么意义,但是有没有一个类型转换可以让我把字典传递给构造函数呢?

显而易见的强制转换((IDictionary<int, IEnumerable<T>>)dictionary)在运行时失败。

EN

Stack Overflow用户

回答已采纳

发布于 2013-01-29 11:21:38

不,因为那样不安全:

代码语言:javascript
复制
Dictionary<int, List<int>> mydictionary = whatever;
Dictionary<int, IEnumerable<int>> converted = (Dictionary<int, IEnumerable<int>>) mydictionary;
converted.Add(10, new int[] { 1, 2, 3 } );

并且您刚刚向只能容纳列表的字典添加了一个数组。这是不允许的,因为没有办法保证它的安全性。

您注意到字典接口不是协变的;这正是它不能协变的原因。协变注释中的"out“是一个助记符,它告诉您”value参数仅用于输出“,但显然value参数用于输入到字典中。

票数 9
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14575018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档