IList Interfejs

Definicja

Reprezentuje niegeneryjną kolekcję obiektów, do których można uzyskać dostęp indywidualnie według indeksu.

C#
public interface IList : System.Collections.ICollection
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IList : System.Collections.ICollection
Pochodne
Atrybuty
Implementuje

Przykłady

W poniższym przykładzie pokazano implementację interfejsu IList w celu utworzenia prostej listy o stałym rozmiarze.

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

Uwagi

IList jest elementem potomnym interfejsu ICollection i jest podstawowym interfejsem wszystkich list innych niż ogólne. IList implementacje dzielą się na trzy kategorie: tylko do odczytu, stały rozmiar i zmienny rozmiar. Nie można zmodyfikować IList tylko do odczytu. IList o stałym rozmiarze nie zezwala na dodawanie ani usuwanie elementów, ale umożliwia modyfikację istniejących elementów. Zmienny rozmiar IList umożliwia dodawanie, usuwanie i modyfikowanie elementów.

Aby uzyskać ogólną wersję tego interfejsu, zobacz System.Collections.Generic.IList<T>.

Właściwości

Count

Pobiera liczbę elementów zawartych w ICollection.

(Odziedziczone po ICollection)
IsFixedSize

Pobiera wartość wskazującą, czy IList ma stały rozmiar.

IsReadOnly

Pobiera wartość wskazującą, czy IList jest tylko do odczytu.

IsSynchronized

Pobiera wartość wskazującą, czy dostęp do ICollection jest synchronizowany (bezpieczny wątek).

(Odziedziczone po ICollection)
Item[Int32]

Pobiera lub ustawia element w określonym indeksie.

SyncRoot

Pobiera obiekt, który może służyć do synchronizowania dostępu do ICollection.

(Odziedziczone po ICollection)

Metody

Add(Object)

Dodaje element do IList.

Clear()

Usuwa wszystkie elementy z IList.

Contains(Object)

Określa, czy IList zawiera określoną wartość.

CopyTo(Array, Int32)

Kopiuje elementy ICollection do Array, począwszy od określonego indeksu Array.

(Odziedziczone po ICollection)
GetEnumerator()

Zwraca moduł wyliczający, który iteruje za pośrednictwem kolekcji.

(Odziedziczone po IEnumerable)
IndexOf(Object)

Określa indeks określonego elementu w IList.

Insert(Int32, Object)

Wstawia element do IList w określonym indeksie.

Remove(Object)

Usuwa pierwsze wystąpienie określonego obiektu z IList.

RemoveAt(Int32)

Usuwa element IList w określonym indeksie.

Metody rozszerzania

Cast<TResult>(IEnumerable)

Rzutuje elementy IEnumerable do określonego typu.

OfType<TResult>(IEnumerable)

Filtruje elementy IEnumerable na podstawie określonego typu.

AsParallel(IEnumerable)

Umożliwia równoległość zapytania.

AsQueryable(IEnumerable)

Konwertuje IEnumerable na IQueryable.

Dotyczy

Produkt Wersje
.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

Zobacz też