Array.IsReadOnly niespójny w zależności od implementacji interfejsu
Tablica wpisana implementuje obaSystem.Collections.IList
iSystem.Collections.Generic.ICollection<T>
interfejsy, które mają swoje własneIsReadOnly
nieruchomości. Ale co tu się dzieje?
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"
TheIList
widok tablicy zachowuje się tak, jak oczekiwałem, zwracając to samo, co sama tablica, jednakICollection<T>
widok tablicy zwraca wartość true.
Czy istnieje jakieś racjonalne wyjaśnienie tego zachowania, czy jest to błąd kompilatora / CLR? (Byłbym naprawdę zdziwiony, gdyby to ten drugi, jak można sobie wyobrazić, zostałby znaleziony już wcześniej, ale jest tak sprzeczny z intuicją, że nie mogę myśleć, jakie może być wyjaśnienie ...).
Używam C # 3.0 / .NET 3.5 SP1.