字典实例化

时间:2013-01-17 04:57:33

标签: c# dictionary type-conversion new-operator instantiation

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

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

例如:

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

或:

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

2 个答案:

答案 0 :(得分: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的声明和实例化类型,该值应为bmpDict,但正如我们上面所见,通过Bitmap添加的内容不是dict Dictionary<string, object>变量。如您所见,类型安全性将被打破。

因此,Dictionary<string, Bitmap>和{{1}}无法相互分配。

答案 1 :(得分:0)

如果回答直接问题。

是不可能的
Dictionary<string, object> dick; 
dick = new Dictionary<string, Image>();

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

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

<强>更新
我仍然怀疑explanation by O. R. 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>
不同的?