Классы коллекций Web-Extension
Классы коллекций Web-Extension
Это руководство показывает, как четыре класса коллекций веб-расширений в Aspose.Words FOSS для .NET — TaskPaneCollection, WebExtensionBindingCollection, WebExtensionPropertyCollection, и WebExtensionReferenceCollection — используют единый контракт коллекции через абстрактный BaseWebExtensionCollection базовый класс. Чтобы понять, что представляют собой панели задач, привязки и свойства веб-расширений, см. Веб-расширения руководство; эта страница охватывает только общий контейнер API.
BaseWebExtensionCollection: один контракт, четыре коллекции
BaseWebExtensionCollection является базовым классом для TaskPaneCollection, WebExtensionBindingCollection, WebExtensionPropertyCollection и WebExtensionReferenceCollection. Он реализует IEnumerable<T> и определяет каждый член, который эти четыре конкретных коллекции раскрывают — ни один из четырёх подклассов не объявляет дополнительных методов или свойств, помимо того, что предоставляет базовый класс.
Добавление, удаление и подсчёт элементов
Add(item) добавляет указанный элемент в коллекцию. Clear() удаляет все элементы. Remove(index) удаляет элемент по указанному индексу — он принимает позиционный index, а не ссылку на элемент, поэтому удаление конкретного элемента подразумевает сначала найти его индекс. Count сообщает количество элементов, находящихся в данный момент в коллекции.
Перебор коллекции
GetEnumerator() возвращает перечислитель, который может перебирать элементы коллекции, поэтому любая BaseWebExtensionCollection-производная коллекция поддерживает цикл foreach по своим элементам без кода, зависящего от типа.
Советы и лучшие практики
- Поскольку все четыре коллекции используют один и тот же базовый контракт, код, написанный в отношении
BaseWebExtensionCollection’sAdd,Clear,Remove,CountиGetEnumeratorчленов, работает одинаково во всехTaskPaneCollection,WebExtensionBindingCollection,WebExtensionPropertyCollectionиWebExtensionReferenceCollection. Remove(index)принимает позиционный индекс — если у вас есть только сам элемент, сначала переберите коллекцию, чтобы найти его индекс, или отслеживайте индекс во время вставки.- Прочитайте
Countперед итерацией, либоforeachпо коллекции напрямую с помощьюGetEnumerator(), а не выполнять индексацию вручную, поскольку базовый контракт не предоставляет позиционный геттер. - Вызовите
Clear(), когда нужно сбросить коллекцию, вместо того чтобы многократно вызыватьRemoveв цикле.
Распространённые проблемы
| Проблема | Причина | Исправить |
|---|---|---|
Remove не принимает сам элемент | Remove(index) в BaseWebExtensionCollection-производных коллекциях принимает позиционный индекс, а не ссылку | Сначала найдите индекс элемента (например, во время перебора), затем вызовите Remove(index) |
| Итерация одной из четырёх коллекций выглядит дублирующейся между типами | Каждая коллекция — отдельный конкретный тип, но они все имеют общие члены BaseWebExtensionCollection | Напишите общую логику итерации или вспомогательные функции один раз, используя члены Add, Clear, Remove, Count и GetEnumerator, общие для всех четырёх |
| Неясно, какой конкретный тип коллекции нужен коду | Четыре коллекции доступны через разные свойства в WebExtension и Document | Проверьте Web Extensions руководство о том, какое свойство возвращает какой тип коллекции |
FAQ
Почему четыре коллекции web-extension ведут себя одинаково?
Все они наследуются от одного и того же абстрактного базового класса BaseWebExtensionCollection, который определяет Add, Clear, Remove, Count и GetEnumerator — ни один из четырёх подклассов не добавляет собственных членов.
Как удалить конкретный элемент из одной из этих коллекций?
Вызовите Remove(index), передав позиционный индекс элемента — найдите индекс, перечислив коллекцию сначала, если у вас есть только ссылка на элемент.
Могу ли я перебрать любую из этих четырёх коллекций одинаковым способом?
Да — все четыре реализуют IEnumerable<T> через BaseWebExtensionCollection, поэтому GetEnumerator() / foreach работают идентично во всех них.
Где я могу узнать, что на самом деле представляет собой элемент WebExtensionBinding или TaskPane?
Смотрите Web Extensions руководство — эта страница охватывает только поведение общего контейнера коллекций, а не доменные объекты, содержащиеся в коллекциях.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
BaseWebExtensionCollection | Абстрактный базовый класс, общий для всех четырёх типов коллекций web-extension |
BaseWebExtensionCollection.Add(item) | Добавляет элемент в коллекцию |
BaseWebExtensionCollection.Clear() | Удаляет все элементы из коллекции |
BaseWebExtensionCollection.Remove(index) | Удаляет элемент по указанному индексу |
BaseWebExtensionCollection.GetEnumerator() | Возвращает перечислитель для перебора коллекции |
BaseWebExtensionCollection.Count | Количество элементов в коллекции |
TaskPaneCollection | Конкретный BaseWebExtensionCollection из TaskPane элементов |
WebExtensionBindingCollection | Конкретный BaseWebExtensionCollection из WebExtensionBinding элементов |
WebExtensionPropertyCollection | Конкретный BaseWebExtensionCollection из WebExtensionProperty элементов |
WebExtensionReferenceCollection | Конкретный BaseWebExtensionCollection из WebExtensionReference элементов |