首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IDictionary<TKey,.NET 4中的TValue>不是协变的

IDictionary<TKey,.NET 4中的TValue>不是协变的
EN

Stack Overflow用户
提问于 2010-01-28 03:04:52
回答 3查看 9K关注 0票数 63

.NET 4/Silverlight4中的IDictionary<TKey, TValue>不支持协方差,即我不能

代码语言:javascript
复制
IDictionary<string, object> myDict = new Dictionary<string, string>();

类似于我现在可以使用IEnumerable<T>%s执行的操作。

可能归结为KeyValuePair<TKey, TValue>也不是协变的。我觉得在字典中应该允许协方差,至少对于值是允许的。

那么,这是一个bug还是一个特性?它会出现吗,也许是在.NET 37.4中?

更新(两年后):

在.NET 4.5中会有一个IReadOnlyDictionary,但它也不会是协变的:·/,因为它是从IEnumerable<KeyValuePair<TKey, TValue>>派生的,而KeyValuePair<TKey, TValue>不是一个接口,因此不能是协变的。

BCL团队将不得不重新设计很多东西,才能使用一些ICovariantPair<TKey, TValue>。此外,强类型索引器ála this[TKey key]不可能用于协变接口。类似的目的只能通过将扩展方法GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)放在某个地方来实现,该扩展方法在内部必须以某种方式调用实际的实现,这看起来似乎是一种相当混乱的方法。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2149589

复制
相关文章

相似问题

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