协方差行为中的数组对象[]

Mis*_*ers 3 c# covariance

我有一个编译错误,而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)

如果我正在为数组对象初始化值类型,为什么这会起作用?不应该互惠不接受价值类型吗?

Lua*_*aan 7

因为你(隐含地)将一个项目一个接一个地投入到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)