Свойство IsReadOnly в ICollection<T>

204
19 октября 2017, 08:16

Пытаюсь разобраться в написании собственных коллекций (да и вообще по глубже разобраться в коллекциях).

Я сейчас в учебных целях пишу реализацию коллекции, которая наследует интерфейс ICollection<T>.

Такой вопрос, как должен себя вести метод add если в коллекции по умолчанию задано IsReadOnly = true?

Есть такие варианты как:

  1. выбрасывать исключение если он был вызван (но это ужасно глупо);
  2. не иметь ни какой реализации (получается метод пустышка только для интерфейса, я не уверен, что это нормально);
  3. скрывать его под явной реализацией интерфейса и делать реализацию пустой (то же самое, что и в предыдущем варианте только может чуть лучше).
Answer 1

Именно так, бросать исключение. Ничего глупого в этом нет: если операцию невозможно выполнить, нужно как можно громче заявить об этом, а не притворяться, что всё идёт как надо. В противном случае программист добавит элементы в коллекцию, не заметит ошибку, и будет считать, что ничего странного не происходит. Отловить логическую ошибку («я добавил элементы в коллекцию, но они там не появились») на порядок сложнее, чем поймать креш в виде необработанного исключения.

Наличие свойства IsReadOnly — ошибка в проектировании, сделанная ещё во времена .NET 1.0. Правильнее было бы иметь отдельный интерфейс IReadOnlyList<T> (который появился в .NET 4.5).

READ ALSO
Перемещение файла в корзину

Перемещение файла в корзину

Имеется заданный путь к файлу, подскажите, как переместить его в корзину?

329
MYSQL C# ошибка при вызове хранимой процедуры

MYSQL C# ошибка при вызове хранимой процедуры

Добрый верчерЯ на C# и MySql делал проект онлайн меню заказа еды

281
помогите решить задачуууууу [требует правки]

помогите решить задачуууууу [требует правки]

было 5 ящиковв них поровну лежали яблоки

221