Вследствие того же наследования от интерфейса IEnumerable
в интерфейсе ICollection
определяются также четыре следующих метода расширения: AsParallel()
, AsQueryable()
, Cast()
и OfType()
. В частности, метод AsParallel()
объявляется в классе System.Linq.ParallelEnumerable
, метод AsQueryable()
— в классе System.Linq.Queryable
, а методы Cast()
и OfType()
— в классе System.Linq.Enumerable
. Эти методы предназначены главным образом для поддержки LINQ, хотя их можно применять и в других целях.
В интерфейсе IList
объявляется такое поведение необобщенной коллекции, которое позволяет осуществлять доступ к ее элементам по индексу с отсчетом от нуля. Этот интерфейс наследует от интерфейсов ICollection
и IEnumerable
. Помимо методов, определенных в этих интерфейсах, в интерфейсе IList
определяется ряд собственных методов. Все эти методы сведены в табл. 25.2. В некоторых из них предусматривается модификация коллекции. Если же коллекция доступна только для чтения или имеет фиксированный размер, то в этих методах генерируется исключение NotSupportedException
.
Таблица 25.2. Методы определенные в интерфейсе IList
Метод - Описание
int Add(object
void Clear() - Удаляет все элементы из вызывающей коллекции
bool Contains(object
int IndexOf(object
void Insert (int
void Remove(object
void RemoveAt(int
Объекты добавляются в коллекцию типа IList
вызовом метода Add()
. Обратите внимание на то, что метод Add()
принимает аргумент типа object
. А поскольку object
является базовым классом для всех типов, то в необобщенной коллекции может быть сохранен объект любого типа, включая и типы значений, в силу автоматической упаковки и распаковки.
Для удаления элемента из коллекции служат методы Remove()
и RemoveAt()
. В частности, метод Remove()
удаляет указанный объект, а метод RemoveAt()
удаляет объект по указанному индексу. И для опорожнения коллекции вызывается метод Clear()
.
Для того чтобы выяснить, содержится ли в коллекции конкретный объект, вызывается метод Contains()
. Для получения индекса объекта вызывается метод IndexOf()
, а для вставки элемента в коллекцию по указанному индексу — метод Insert()
.
В интерфейсе IList
определяются следующие свойства.
bool IsFixedSize { get; }
bool IsReadOnly { get; }
Если коллекция имеет фиксированный размер, то свойство IsFixedSize
содержит логическое значение true
. Это означает, что в такую коллекцию нельзя ни вставлять элементы, ни удалять их из нее. Если же коллекция доступна только для чтения, то свойство IsReadOnly
содержит логическое значение true. Это означает, что содержимое такой коллекции не подлежит изменению.
Кроме того, в интерфейсе IList
определяется следующий индексатор.
object this[int index] { get; set; }
Этот индексатор служит для получения и установки значения элемента коллекции. Но его нельзя использовать для добавления в коллекцию нового элемента. С этой целью обычно вызывается метод Add()
. Как только элемент будет добавлен в коллекцию, он станет доступным посредством индексатора.