我有一个编译错误,而assinging int[]到object[](这个问题不是我的).
接受的答案表明这是因为数组协方差(请为了更好地理解而阅读问题和答案).
现在我的情况是,虽然我不能分配int[],object[]因为int是值类型(struct)我想知道为什么我现在可以这样做:
var arrayOfObjects = new object[] { 58, 58, 78 };// it accepts values types as initializers!
Run Code Online (Sandbox Code Playgroud)
如果我正在为数组对象初始化值类型,为什么这会起作用?不应该互惠不接受价值类型吗?
因为你(隐含地)将一个项目一个接一个地投入到object.您没有int[]为object[]变量分配数组- 您正在object[]从单个int值创建变量(它会被隐式转换和加载).
要在没有数组初始化程序的情况下显示:
object[] objarr = new object[1];
objarr[0] = 42; // Fine, translates basically into objarr[0] = (object)42;
int[] intarr = new int[1];
intarr[0] = 42; // Also fine
objarr = intarr; // No can do!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |