.NET 4 / Silverlight 4 中的IDictionary<TKey, TValue>
不支持协方差,即我不能做
IDictionary<string, object> myDict = new Dictionary<string, string>();
类似于我IEnumerable<T>
现在可以用 s 做的事情。
可能归结为KeyValuePair<TKey, TValue>
也不是协变的。我觉得至少在值的字典中应该允许协方差。
那么这是一个错误还是一个功能?它会不会出现,也许在 .NET 37.4 中?
更新(2年后):
.NET 4.5 中会有一个IReadOnlyDictionary<TKey, TValue>
,但它也不会是协变的:·/
,因为它派生自IEnumerable<KeyValuePair<TKey, TValue>>
,并且KeyValuePair<TKey, TValue>
不是接口,因此不能是协变的。
BCL 团队将不得不重新设计很多东西来ICovariantPair<TKey, TValue>
替代使用。强类型索引器this[TKey key]
也不能用于协变接口。类似的结果只能通过在GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
某个地方放置一个扩展方法来实现,该方法在内部必须以某种方式调用一个实际的实现,可以说这看起来是一种非常混乱的方法。