为什么C#数组是协变的,它带来了什么好处?

Mat*_*t B 8 c# arrays covariance

我无法理解为什么C#中的数组是协变的,以及这种协方差带来的好处.考虑以下简单的代码示例:

object[] myArray = new string[1];
myArray[0] = 1;
Run Code Online (Sandbox Code Playgroud)

这段代码可以编译好,但是会毫不客气地在运行时爆炸.

如果我尝试使用泛型尝试同样的事情,编译器会抱怨我,我会在早期阶段意识到我的愚蠢,所以我的问题是:为什么C#编译器允许这种与数组的协方差,而且,什么是潜在的好处?

mqp*_*mqp 13

Eric Lippert说:

不幸的是,这种特殊的协方差被打破了.它被添加到CLR中,因为Java需要它,而CLR设计者希望能够支持类似Java的语言.然后我们将它添加到C#,因为它在CLR中.这个决定当时颇具争议,我对它并不是很满意,但现在我们无能为力.