此代码有效的原因是Enumerator
无法修改集合:
var roList = new List<string>() { "One", "Two", "Three" };
IEnumerable<object> objEnum = roList;
如果我们尝试用 aList<object>
而不是做同样的事情IEnumerable<object>
,我们会得到一个编译器错误,告诉我们我们不能将 type 隐式转换List<string>
为List<object>
。好吧,这是有道理的,在我看来,这是微软的一个很好的决定,作为从数组中吸取的教训。
但是,我不明白为什么这个强硬规则适用于类似的东西ReadOnlyCollection
?我们将无法修改 中的元素ReadOnlyCollection
,那么导致 Microsoft 阻止我们对只读内容使用协方差的安全问题是什么?有没有一种可能的方法来修改微软试图解释的那种类型的集合,比如通过指针?