.NET 4/Silverlight4中的IDictionary<TKey, TValue>
不支持协方差,即我不能
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)
放在某个地方来实现,该扩展方法在内部必须以某种方式调用实际的实现,这看起来似乎是一种相当混乱的方法。
https://stackoverflow.com/questions/2149589
复制相似问题