Почему INotifyCollectionChanged использует IList - PullRequest
0 голосов
/ 04 декабря 2011

Чтение здесь , я понимаю, почему это не IList<T>. Но зачем вообще IList? Не имеет смысла добавлять к нему, поэтому он должен быть просто IEnumerable, или, если вы действительно хотите индексатор (без причины), используйте ReadOnlyCollection.

Ответы [ 3 ]

2 голосов
/ 04 декабря 2011

Взгляните на NotifyCollectionChangedEventArgs.

Имеет свойства NewStartingIndex и OldStartingIndex.

Так что дизайн основан на индексируемых коллекциях, я полагаю, это удобно, например, для списков.

1 голос
/ 04 декабря 2011

Индексирование желательно для сценариев виртуализации списков.

IList - это простейший интерфейс коллекции, предоставляющий индексированный доступ к элементам. ReadOnlyCollection - это конкретный класс и, следовательно, более ограничивающий для разработчиков.

0 голосов
/ 04 декабря 2011

Я думаю, что в случае INotifyCollectionChanged вам часто нужно выполнить поиск компонентов по их именам (поскольку свойства хранятся там как строки), поэтому важно иметь индексатор, который принимает строки ( и основная структура, вероятно, должна быть чем-то вроде HashTable).

На веб-странице MSDN вы можете найти следующую рекомендацию:

Если у вас есть продвинутый сценарий и вы хотите реализовать свой собственный коллекция, рассмотрите возможность использования IList, который предоставляет неуниверсальный коллекция объектов, к которым можно получить индивидуальный доступ по индексу и обеспечивает лучшую производительность.

...