Ich schreibe eine Array-Wrapper-Klasse, die IList<T>
implementiert. Ich bin mir nicht sicher, was ich für IList<T>.IsReadOnly
(geerbt von ICollection<T>
), obwohl.Vertrag von ICollection <T> .IsReadOnly
Meine Klasse verbietet das Einfügen und Entfernen. Es ermöglicht ermöglichen, Elemente über die this[int].set
Eigenschaft zu ändern.
Die MSDN besagt, dass
Eine Sammlung, die schreibgeschützt ist, erlaubt es nicht, die Hinzufügen, Entfernen oder Modifikation von Elementen nach der Sammlung erstellt wird.
Für meine Klasse, dies scheint zu implizieren, dass ich true
zurückkehren, aber in meinen Augen das macht die Eigenschaft eine Bit völlig nutzlos: soweit ich sehen kann, ist die Anwendung dieses Verfahrens wird wie folgt :
Die Clients behandeln eine beliebige IList
und müssen ein Element einfügen, , wenn überhaupt möglich. Sie können dies tun, indem Sie einfach Insert
aufrufen und die resultierende NotSupportedException
fangen - und aus verschiedenen Gründen kann dies nicht wünschenswert sein. Anstatt eine Ausnahme zu provozieren, können die Kunden die Eigenschaft IsReadOnly
vorab testen.
Aber das Ergebnis dieser Eigenschaft wird falsch sein, weil es Modifizierbarkeit der Sammlung mit Modifizierbarkeit seines Inhalts mischt - die völlig unabhängig Angelegenheiten sind!
Um sicher zu sein, gibt es die IList.IsFixedSize
Eigenschaft, aber dies ist ein separater Typ (IList<T>
tut nichtIList
verlängern). Was soll ich machen? Implementieren Sie auch IList
(ich wirklich nicht wie diese Alternative)? Mach etwas anderes?
Nur etwas hinzufügen, mit Readonlycollection der Inhalt kann veränderbar (wenn wandelbar) und immer noch sein, die „IsReadOnly“ Eigenschaft gibt wahr ... –
@bruno -, die von „Bearbeitung Inhalt“ Sie bedeuten, davon abhängt, ob ** ersetzen ** das Element an einer bestimmten Position (Liste [n] = Element) und ** das Element an einer bestimmten Position mutieren (Liste [n] .SomeProp = Wert). –