Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 铸造词典<;TKey,TValue>;as字典<;TKey,TBaseValue>;_C#_C# 4.0_Dictionary_Casting - Fatal编程技术网

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>