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.