给予:
class TKey {}
class TBaseValue {}
class TValue : TBaseValue {}我们怎么能投
Dictionary<TKey, TValue>作为
Dictionary<TKey, TBaseValue>为什么不能含蓄地这样做呢?
发布于 2014-11-20 00:20:30
因为Dictionary<TKey, TValue>不是只读的,所以不能在这里使用协方差(实际上,在声明类型时没有允许协/反方差的out或in )。
为了说明为什么会出现这种情况,只需考虑一下一旦转换到Dictionary<TKey, TBaseValue>之后会发生什么。您仍然在处理原始字典,它的值应该是TValue。但是,通过这种方式,您可以添加一些不同的TBaseValue子类(甚至TBaseValue本身),这将违反原始对象类型的规则。
基本上,这是C#防止你犯一个大错误的方法。
https://stackoverflow.com/questions/27029520
复制相似问题