Array.IsReadOnly несовместим в зависимости от реализации интерфейса

Типизированный массив реализует какSystem.Collections.IList а такжеSystem.Collections.Generic.ICollection<T> интерфейсы, которые оба имеют своиIsReadOnly свойства. Но что здесь происходит?

var array = new int[10];
Console.WriteLine(array.IsReadOnly); // prints "False"

var list = (System.Collections.IList)array;
Console.WriteLine(list.IsReadOnly); // prints "False"

var collection = (System.Collections.Generic.ICollection<int>)array;
Console.WriteLine(collection.IsReadOnly); // prints "True"

IList представление массива ведет себя так, как я ожидал, возвращая то же самое, что и сам массив, однакоICollection<T> представление массива возвращает true.

Есть ли рациональное объяснение этому поведению, или это ошибка компилятора / CLR? (Я был бы очень удивлен, если бы это было последним, поскольку вы могли бы предположить, что это было бы найдено до сих пор, но это настолько нелогично, что я не могу думать, какое объяснение могло бы быть ...).

Я использую C # 3.0 / .NET 3.5 SP1.

Ответы на вопрос(4)

Ваш ответ на вопрос