Dictionary<string,object> dict = new Dictionary <string,object>();
我可以使用其他一些对象实例化“dict
”吗?字典实例化
例如:
dict = new Dictionary<string,bitmap>();
或:
dict = new Dictionary<string, Image>();
Dictionary<string,object> dict = new Dictionary <string,object>();
我可以使用其他一些对象实例化“dict
”吗?字典实例化
例如:
dict = new Dictionary<string,bitmap>();
或:
dict = new Dictionary<string, Image>();
没有,因为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>
不能被分配给对方。
如果回答直接问题。
这是不可能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>
不同?
1)“应该起什么作用”是什么意思?你能改述一下吗? 2)不,这是完全不同的情况。对象obj没有任何事情确保obj是一个Image,后面的BitmapImage分配会与之冲突。 –
+1,为什么不能做 –
@ GennadyVanin很好的例子 - ГеннадийВанин:1)'位图someBmp = bmpDict [ “someKey”];'是可编译,因为bmpDict'的'索引返回'位图价值观。 2)类型安全性不被'object o = new Image();'破坏。它没有声称任何'o'是'Image'。相反,'bmpDict'声称它的所有值都是'Bitmap',而'dict'允许添加非'Bitmap'值。 –
我仍然看到我的[更新](http://stackoverflow.com/a/14374638/200449),不太确定 –