Прочитать на английском

Поделиться через


IList Интерфейс

Определение

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

C#
public interface IList : System.Collections.ICollection
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IList : System.Collections.ICollection
Производный
Атрибуты
Реализации

Примеры

В следующем примере демонстрируется реализация интерфейса IList для создания простого списка фиксированного размера.

C#
using System;
using System.Collections;

class Program
{
    static void Main()
    {
        var test = new SimpleList();

        // Populate the List.
        Console.WriteLine("Populate the List");
        test.Add("one");
        test.Add("two");
        test.Add("three");
        test.Add("four");
        test.Add("five");
        test.Add("six");
        test.Add("seven");
        test.Add("eight");
        test.PrintContents();
        Console.WriteLine();

        // Remove elements from the list.
        Console.WriteLine("Remove elements from the list");
        test.Remove("six");
        test.Remove("eight");
        test.PrintContents();
        Console.WriteLine();

        // Add an element to the end of the list.
        Console.WriteLine("Add an element to the end of the list");
        test.Add("nine");
        test.PrintContents();
        Console.WriteLine();

        // Insert an element into the middle of the list.
        Console.WriteLine("Insert an element into the middle of the list");
        test.Insert(4, "number");
        test.PrintContents();
        Console.WriteLine();

        // Check for specific elements in the list.
        Console.WriteLine("Check for specific elements in the list");
        Console.WriteLine($"List contains \"three\": {test.Contains("three")}");
        Console.WriteLine($"List contains \"ten\": {test.Contains("ten")}");
    }
}

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }

        return -1;
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                return true;
            }
        }
        return false;
    }

    public int IndexOf(object value)
    {
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                return i;
            }
        }
        return -1;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection members.

    public void CopyTo(Array array, int index)
    {
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], index++);
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new NotImplementedException("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine($"List has a capacity of {_contents.Length} and currently has {_count} elements.");
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write($" {_contents[i]}");
        }
        Console.WriteLine();
    }
}

// This code produces output similar to the following:
// Populate the List:
// List has a capacity of 8 and currently has 8 elements.
// List contents: one two three four five six seven eight
//
// Remove elements from the list:
// List has a capacity of 8 and currently has 6 elements.
// List contents: one two three four five seven
//
// Add an element to the end of the list:
// List has a capacity of 8 and currently has 7 elements.
// List contents: one two three four five seven nine
//
// Insert an element into the middle of the list:
// List has a capacity of 8 and currently has 8 elements.
// List contents: one two three four number five seven nine
//
// Check for specific elements in the list:
// List contains "three": True
// List contains "ten": False

Комментарии

IList является потомком интерфейса ICollection и является базовым интерфейсом всех не универсальных списков. реализации IList делятся на три категории: только для чтения, фиксированного размера и размера переменной. Невозможно изменить IList только для чтения. Фиксированный размер IList не позволяет добавлять или удалять элементы, но позволяет изменять существующие элементы. Переменный размер IList позволяет добавлять, удалять и изменять элементы.

Для универсальной версии этого интерфейса см. System.Collections.Generic.IList<T>.

Свойства

Count

Возвращает количество элементов, содержащихся в ICollection.

(Унаследовано от ICollection)
IsFixedSize

Возвращает значение, указывающее, имеет ли IList фиксированный размер.

IsReadOnly

Возвращает значение, указывающее, доступен ли IList только для чтения.

IsSynchronized

Возвращает значение, указывающее, синхронизирован ли доступ к ICollection (потокобезопасный).

(Унаследовано от ICollection)
Item[Int32]

Возвращает или задает элемент по указанному индексу.

SyncRoot

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

(Унаследовано от ICollection)

Методы

Add(Object)

Добавляет элемент в IList.

Clear()

Удаляет все элементы из IList.

Contains(Object)

Определяет, содержит ли IList определенное значение.

CopyTo(Array, Int32)

Копирует элементы ICollection в Array, начиная с определенного индекса Array.

(Унаследовано от ICollection)
GetEnumerator()

Возвращает перечислитель, который выполняет итерацию по коллекции.

(Унаследовано от IEnumerable)
IndexOf(Object)

Определяет индекс определенного элемента в IList.

Insert(Int32, Object)

Вставляет элемент в IList по указанному индексу.

Remove(Object)

Удаляет первое вхождение определенного объекта из IList.

RemoveAt(Int32)

Удаляет элемент IList по указанному индексу.

Методы расширения

Cast<TResult>(IEnumerable)

Приведение элементов IEnumerable к указанному типу.

OfType<TResult>(IEnumerable)

Фильтрует элементы IEnumerable на основе указанного типа.

AsParallel(IEnumerable)

Включает параллелизацию запроса.

AsQueryable(IEnumerable)

Преобразует IEnumerable в IQueryable.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

См. также раздел