1.首先创建一下SelfList<T>类;
public class SelfList<T>:IEnumerable
{
}
2.添加默认的初始大小为4的Item数组;
public class SelfList<T>:IEnumerable
{
/// <summary>
/// 默认数组
///
</summary>
private T[] items=new T[4];
public T[]
Items
{
get { return items; }
set { items = value;
}
}
}
3.添加只读的Count属性,用于记录Item数组中元素的个数
public class SelfList<T>:IEnumerable
{
/// <summary>
/// 默认数组
///
</summary>
private T[] items=new T[4];
public T[]
Items
{
get { return items; }
set { items = value;
}
}
/// <summary>
/// 记录数组中元素的个数
///
</summary>
private int count;
public int Count
{
get
{ return count; }
}
}
4.添加向数组中增加元素的方法
/// <summary>
/// 向数组中添加元素
/// </summary>
/// <param name="item"></param>
public void Add(T
item)
{
if (count==items.Length)
{
T[] newArr=new
T[items.Length*2];
items.CopyTo(newArr,0);
items =
newArr;
}
items[count] = item;
count++;
}
5.添加删除元素的方法
public void RemoveAt(int index)
{
if (index < 0 || index
>= items.Length)
{
throw new
Exception("下标越界");
}
Array.Copy(items,index+1,items,index,items.Length-index-1);
count--;
}
6.添加索引
public T this[int index]
{
get
{
if (index <
0 || index>=items.Length)
{
throw new
Exception("下标越界");
}
return
items[index];
}
set
{
if (index < 0 || index >=
items.Length)
{
throw new
Exception("下标越界");
}
items[index] = value;
}
}
7.要实现对集合的遍历需要实现 IEnumerable接口并重写 GetEnumerator()方法,方法有一个IEnumerator接口的返回值,所以我们要自己定义一个实现了IEnumerator
接口的类
public class SelfList<T>:IEnumerable
{
public IEnumerator GetEnumerator()
{
return new
MyEnumerator<T>(items,count);
}
}
public class MyEnumerator<T> : IEnumerator
{
private T[] temp;//记录要遍历的数组
private int num;//记录数组中元素的个数
private int index = -1;
public MyEnumerator(T[] temp,int
num)
{
this.temp = temp;
this.num = num;
}
/// <summary>
/// 得到现在下标指向的元素
///
</summary>
public object Current
{
get { return temp[index]; }
}
/// <summary>
/// 判断下一个位置是否还有元素
///
</summary>
/// <returns></returns>
public bool MoveNext()
{
index++;
if
(index<num)
{
return true;
}
return
false;
}
/// <summary>
/// 初始化遍历位置
/// </summary>
public void Reset()
{
index = -1;
}
}
8.最后在Main方法中就可以实现集合的遍历:
static void Main(string[] args)
{
SelfList<int> lists=new SelfList<int>();
lists.Add(1);
lists.Add(2);
lists.Add(3);
foreach(int item in lists)
{
Console.WriteLine(item+"");
}
}
自定义集合的全部实现代码:
public class SelfList<T>:IEnumerable
{
///
<summary>
/// 默认数组
/// </summary>
private T[]
items=new T[4];
public T[] Items
{
get { return items;
}
set { items = value; }
}
/// <summary>
///
记录数组中元素的个数
/// </summary>
private int count;
public
int Count
{
get { return count; }
}
///
<summary>
/// 向数组中添加元素
/// </summary>
///
<param name="item"></param>
public void Add(T
item)
{
f (count==items.Length)
{
T[] newArr=new
T[items.Length*2];
items.CopyTo(newArr,0);
items =
newArr;
}
items[count] = item;
count++;
}
/// <summary>
/// 数组下标索引
///
</summary>
/// <param name="index"></param>
///
<returns></returns>
public T this[int
index]
{
get
{
if (index < 0 ||
index>=items.Length)
{
throw new
Exception("下标越界");
}
return
items[index];
}
set
{
if (index < 0 || index >=
items.Length)
{
throw new
Exception("下标越界");
}
items[index] =
value;
}
}
/// <summary>
///
///
</summary>
/// <param name="index"></param>
public
void RemoveAt(int index)
{
if (index < 0 || index >=
items.Length)
{
throw new
Exception("下标越界");
}
Array.Copy(items,index+1,items,index,items.Length-index-1);
count--;
}
public IEnumerator GetEnumerator()
{
return new
MyEnumerator<T>(items,count);
}
}