IList 接口

IList 接口

表示可按照索引单独访问的对象的非泛型集合。

 

命名空间:   System.Collections
程序集:   mscorlib(在 mscorlib.dll 中)
 

IListICollection 接口的子代,并且是所有非泛型列表的基接口。IList 实现有三种类别:只读、固定大小和可变大小。无法修改只读 IList。固定大小的 IList 不允许添加或移除元素,但允许修改现有元素。可变大小的 IList 允许添加、移除和修改元素。

有关此接口的泛型版本,请参见 System.Collections.Generic..::.IList<(Of <(T>)>)

下面的示例演示创建一个简单列表——固定大小列表的 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
Visual Basic(声明)
<ComVisibleAttribute(True)> _
Public Interface IList _
    Implements ICollection, IEnumerable
Visual Basic (用法)
Dim instance As IList
C#
[ComVisibleAttribute(true)]
public interface IList : ICollection, IEnumerable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值