Dictionary<string,object> dict = new Dictionary <string,object>();
我可以用其他一些对象实例化“dict
”吗?
例如:
dict = new Dictionary<string,bitmap>();
或:
dict = new Dictionary<string, Image>();
答案 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>