Cast Dictionary <tkey,tvalue =“”> as Dictionary <tkey,tbasevalue =“”> </tkey,> </tkey,>

时间:2014-11-20 00:13:58

标签: c# c#-4.0 dictionary casting

假设:

class TKey {}
class TBaseValue {}
class TValue : TBaseValue {}

我们如何施展

Dictionary<TKey, TValue>

作为

Dictionary<TKey, TBaseValue>

为什么不能暗中进行呢?

1 个答案:

答案 0 :(得分:1)

由于Dictionary<TKey, TValue>不是只读的,因此您无法在此处使用协方差(事实上,声明的类型是在没有outin的情况下允许合作/禁忌方差)。

为了说明为什么会出现这种情况,只需考虑一旦你投向Dictionary<TKey, TBaseValue>后会发生什么。您仍在处理原始字典,其原始字典应该只是TValue。但是这样,您可以添加一些不同的TBaseValue子类(甚至TBaseValue本身),这会违反原始对象类型的规则。

基本上,这是C#阻止你犯大错的方法。 :)