Я знаю, что в .NET все массивы происходят из System.Array и что класс System.Array реализует IList, ICollection и IEnumerable. Фактические типы массивов также реализуют IList<T>, ICollection<T> и IEnumerable<T>.
Это означает, что если у вас есть, например, String[], то этот объект String[] также является System.Collections.IList и System.Collections.Generic.IList<String>;.
Не трудно понять, почему эти IList считаются "ReadOnly", но на удивление...
String[] array = new String[0];
Console.WriteLine(((IList<String>)array).IsReadOnly); // True
Console.WriteLine(((IList)array).IsReadOnly); // False!
В обоих случаях попытки удалить элементы с помощью методов Remove() и RemoveAt() приводят к исключению NotSupportedException. Это предполагает, что оба выражения соответствуют спискам ReadOnly, но свойство IList ReadOnly не возвращает ожидаемое значение.
Как получилось?