0
Dictionary<string,object> dict = new Dictionary <string,object>();

我可以dict用其他一些对象实例化“”吗?

例如:

dict = new Dictionary<string,bitmap>();

或者:

dict = new Dictionary<string, Image>();
4

2 回答 2

5

不,因为Dictionary<string, object>Dictionary<string, Bitmap>是两种不同的类型。

想象一下在以下场景中会发生什么:

Dictionary<string, Bitmap> bmpDict = new Dictionary<string, Bitmap>();
Dictionary<string, object> dict = bmpDict;
dict.Add("someKey", 42);

编译器必须编译它,因为 中的值dict被键入为object,因此 并且int是一个有效的选择。Bitmap但是,这会与只接受值的实例化字典发生冲突:

Bitmap someBmp = bmpDict["someKey"];

Bitmap显然,根据声明和实例化的类型,值应该是 a bmpDict,但正如我们在上面看到的,不是 a 的东西是Bitmap通过dict变量添加的。如您所见,类型安全将被破坏。

因此,Dictionary<string, object>Dictionary<string, Bitmap>不能相互分配。

于 2013-01-17T08:09:06.010 回答
0

如果直接回答问题。
这是不可能的

Dictionary<string, object> dick; 
dick = new Dictionary<string, Image>();

因为dick被声明为可以保存任何类型的对象的字典类型,这与只能保存 Image 类型对象的值的字典相矛盾。

当然,您可以用任何类型的值 填充dick 。

更新:
我仍然怀疑OR Mapper 的解释以及如何正确解释它。

这样的逻辑解释不了太多。

1)

Bitmap someBmp = bmpDict["someKey"];

应该作为

object someBmp = bmpDict["someKey"];

2)
按照这种逻辑,不可能实例化为

object obj = new Image();
obj = new BitmapImage();

但这是可能的。

IMO,这里的要点是类型的字典

  • Dictionary <string, Image>()

只能包含相同(或兼容的子)类型的值,而字典类型

  • Dictionary<string, object>

的不同?

于 2013-01-17T08:11:36.813 回答