C# 铸造词典<;TKey,TValue>;as字典<;TKey,TBaseValue>;
鉴于: 我们怎么能投C# 铸造词典<;TKey,TValue>;as字典<;TKey,TBaseValue>;,c#,c#-4.0,dictionary,casting,C#,C# 4.0,Dictionary,Casting,鉴于: 我们怎么能投 class TKey {} class TBaseValue {} class TValue : TBaseValue {} 字典 作为 字典 为什么不能含蓄地这样做呢 因为字典不是只读的,所以这里不能使用协方差(实际上,声明类型时没有允许协方差/反方差的out或in) 来说明为什么会出现这种情况,只需考虑一旦您转换到字典< /代码>会发生什么。您仍在处理原始字典,它的值应该仅为TValue。但是如果这样,您可以添加TBaseValue的一些不同子类(甚至TBaseV
class TKey {}
class TBaseValue {}
class TValue : TBaseValue {}
字典
作为
字典
为什么不能含蓄地这样做呢 因为字典
不是只读的,所以这里不能使用协方差(实际上,声明类型时没有允许协方差/反方差的out
或in
)
来说明为什么会出现这种情况,只需考虑一旦您转换到<代码>字典< /代码>会发生什么。您仍在处理原始字典,它的值应该仅为
TValue
。但是如果这样,您可以添加TBaseValue
的一些不同子类(甚至TBaseValue
本身),这将违反原始对象类型的规则
基本上,这是C#防止你犯大错的方法
Dictionary<TKey, TValue>
Dictionary<TKey, TBaseValue>