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
显然,根据声明和实例化的类型,值应该是 a bmpDict
,但正如我们在上面看到的,不是 a 的东西是Bitmap
通过dict
变量添加的。如您所见,类型安全将被破坏。
因此,Dictionary<string, object>
并Dictionary<string, Bitmap>
不能相互分配。
如果直接回答问题。
这是不可能的
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>
的不同?