The IDictionary<TKey, TValue>
in .NET 4 / Silverlight 4 does not support covariance, i.e. I can't do a
IDictionary<string, object> myDict = new Dictionary<string, string>();
analog to what I can do with IEnumerable<T>
s now.
Probably boils down to the KeyValuePair<TKey, TValue>
not being covariant either. I feel that covariance should be allowed in dictionaries at least for the values.
So is that a bug or a feature? Will it ever come, maybe in .NET 37.4?
UPDATE (2 years later):
There will be an IReadOnlyDictionary<TKey, TValue>
in .NET 4.5, but it won't be covariant either :·/
, because it derives from IEnumerable<KeyValuePair<TKey, TValue>>
, and KeyValuePair<TKey, TValue>
is not an interface and thus cannot be covariant.
The BCL team would have to redesign a lot to come up and use some ICovariantPair<TKey, TValue>
instead. Also strongly-typed indexers á la this[TKey key]
aren't possible for covariant interfaces. A similar end can only be achieved by placing an extension method GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
somewhere which would somehow internally have to call an an actual implementation, which arguably looks like a quite messy approach.
Question&Answers:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…