的IDictionary<TKey, TValue>
在.NET 4/Silverlight的4不支持协方差,即我不能做的IDictionary <TKEY的,TValue>中在.NET 4不是协变
IDictionary<string, object> myDict = new Dictionary<string, string>();
模拟到我可以用做IEnumerable<T>
现在。
大概归结为KeyValuePair<TKey, TValue>
也不是协变。我认为字典中至少应该允许协变量的值。
那么,这是一个错误或功能?它会不会来,也许在.NET 37.4?
UPDATE(2年后):
会有在.NET 4.5的IReadOnlyDictionary<TKey, TValue>
,但它不会被协变要么:·/
,因为它是从IEnumerable<KeyValuePair<TKey, TValue>>
派生,并且KeyValuePair<TKey, TValue>
不是接口,因此不能是协变的。
BCL团队将不得不重新设计很多来使用而不是使用ICovariantPair<TKey, TValue>
。对于协变接口,强类型索引器也是不可能的。类似的结局只能通过在某个地方放置一个扩展方法GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
来实现,这个方法在某种程度上必须在内部调用一个实际的实现,这可能看起来像一个相当混乱的方法。
感谢您提供.NET 4.5的更新。恕我直言,在只读字典上使用协变会很有用,所以它看起来不像支持它。 – dcstraw 2012-03-21 20:12:53