IList 接口
表示可按照索引单独访问的对象的非泛型集合。
命名空间:
System.Collections
程序集: mscorlib(在 mscorlib.dll 中)
程序集: mscorlib(在 mscorlib.dll 中)
![](http://i.msdn.microsoft.com/Global/Images/clear.gif)
IList 是 ICollection 接口的子代,并且是所有非泛型列表的基接口。IList 实现有三种类别:只读、固定大小和可变大小。无法修改只读 IList。固定大小的 IList 不允许添加或移除元素,但允许修改现有元素。可变大小的 IList 允许添加、移除和修改元素。
有关此接口的泛型版本,请参见 System.Collections.Generic..::.IList<(Of <(T>)>) 。
![](http://i.msdn.microsoft.com/Global/Images/clear.gif)
下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。
C#
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