Классы коллекций Web-Extension

Классы коллекций 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’s Add, 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 элементов

См. также:

 Русский