2013-01-17 61 views
0
Dictionary<string,object> dict = new Dictionary <string,object>(); 

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

例如:

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

或:

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

回答

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>不能被分配给对方。

+0

+1,为什么不能做 –

+0

@ GennadyVanin很好的例子 - ГеннадийВанин:1)'位图someBmp = bmpDict [ “someKey”];'是可编译,因为bmpDict'的'索引返回'位图价值观。 2)类型安全性不被'object o = new Image();'破坏。它没有声称任何'o'是'Image'。相反,'bmpDict'声称它的所有值都是'Bitmap',而'dict'允许添加非'Bitmap'值。 –

+0

我仍然看到我的[更新](http://stackoverflow.com/a/14374638/200449),不太确定 –

0

如果回答直接问题。
这是不可能istantiate作为

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

因为迪克被声明为可容纳任何类型,是在与矛盾字典仅可以保持图像类型对象的值的对象字典类型。

虽然,当然,你可以填写任何类型的值迪克

更新:
我还在怀疑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>

不同?

+0

1)“应该起什么作用”是什么意思?你能改述一下吗? 2)不,这是完全不同的情况。对象obj没有任何事情确保obj是一个Image,后面的BitmapImage分配会与之冲突。 –