的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