IList Interface
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Represents a non-generic collection of objects that can be individually accessed by index.
Assembly: mscorlib (in mscorlib.dll)
The IList type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | Count | Gets the number of elements contained in the ICollection. (Inherited from ICollection.) |
![]() | IsFixedSize | Gets a value indicating whether the IList has a fixed size. |
![]() | IsReadOnly | Gets a value indicating whether the IList is read-only. |
![]() | IsSynchronized | Gets a value indicating whether access to the ICollection is synchronized (thread safe). (Inherited from ICollection.) |
![]() | Item | Gets or sets the element at the specified index. |
![]() | SyncRoot | Gets an object that can be used to synchronize access to the ICollection. (Inherited from ICollection.) |
| Name | Description | |
|---|---|---|
![]() | Add | Adds an item to the IList. |
![]() | Clear | Removes all items from the IList. |
![]() | Contains | Determines whether the IList contains a specific value. |
![]() | CopyTo | Copies the elements of the ICollection to an Array, starting at a particular Array index. (Inherited from ICollection.) |
![]() | GetEnumerator | Returns an enumerator that iterates through a collection. (Inherited from IEnumerable.) |
![]() | IndexOf | Determines the index of a specific item in the IList. |
![]() | Insert | Inserts an item to the IList at the specified index. |
![]() | Remove | Removes the first occurrence of a specific object from the IList. |
![]() | RemoveAt | Removes the IList item at the specified index. |
| Name | Description | |
|---|---|---|
![]() | AsQueryable | Converts an IEnumerable to an IQueryable. (Defined by Queryable.) |
![]() | Cast<TResult> | Converts the elements of an IEnumerable to the specified type. (Defined by Enumerable.) |
![]() | OfType<TResult> | Filters the elements of an IEnumerable based on a specified type. (Defined by Enumerable.) |
IList is a descendant of the ICollection interface and is the base interface of all non-generic lists. IList implementations fall into three categories: read-only, fixed-size, and variable-size. A read-only IList cannot be modified. A fixed-size IList does not allow the addition or removal of elements, but it allows the modification of existing elements. A variable-size IList allows the addition, removal, and modification of elements.
For the generic version of this interface, see System.Collections.Generic.IList<T>.
The following example demonstrates the implementation of the IList interface to create a simple list, fixed-size list.
Note: |
|---|
To run this example, see Building examples that have static TextBlock controls for Windows Phone 8. |
using System; using System.Collections; class Example { public static void Demo(System.Windows.Controls.TextBlock outputBlock) { SimpleList test = new SimpleList(); // Populate the List outputBlock.Text += "Populate the List" + "\n"; 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(outputBlock); outputBlock.Text += "\n"; // Remove elements from the list outputBlock.Text += "Remove elements from the list" + "\n"; test.Remove("six"); test.Remove("eight"); test.PrintContents(outputBlock); outputBlock.Text += "\n"; // Add an element to the end of the list outputBlock.Text += "Add an element to the end of the list" + "\n"; test.Add("nine"); test.PrintContents(outputBlock); outputBlock.Text += "\n"; // Insert an element into the middle of the list outputBlock.Text += "Insert an element into the middle of the list" + "\n"; test.Insert(4, "number"); test.PrintContents(outputBlock); outputBlock.Text += "\n"; // Check for specific elements in the list outputBlock.Text += "Check for specific elements in the list" + "\n"; outputBlock.Text += String.Format("List contains \"three\": {0}", test.Contains("three")) + "\n"; outputBlock.Text += String.Format("List contains \"ten\": {0}", test.Contains("ten")) + "\n"; } } // class Program 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); } else { return -1; } } public void Clear() { _count = 0; } public bool Contains(object value) { bool inList = false; for (int i = 0; i < Count; i++) { if (_contents[i] == value) { inList = true; break; } } return inList; } public int IndexOf(object value) { int itemIndex = -1; for (int i = 0; i < Count; i++) { if (_contents[i] == value) { itemIndex = i; break; } } return itemIndex; } 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) { int j = index; for (int i = 0; i < Count; i++) { array.SetValue(_contents[i], j); j++; } } 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 Exception("The method or operation is not implemented."); } public void PrintContents(System.Windows.Controls.TextBlock outputBlock) { outputBlock.Text += String.Format("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count) + "\n"; outputBlock.Text += "List contents:"; for (int i = 0; i < Count; i++) { outputBlock.Text += String.Format(" {0}", _contents[i]); } outputBlock.Text += "\n"; } } // 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



Note: