黑马程序员技术交流社区
标题:
如何自己写个集合,用foreach遍历?
[打印本页]
作者:
邓建军
时间:
2013-3-28 14:26
标题:
如何自己写个集合,用foreach遍历?
本帖最后由 邓建军 于 2013-4-4 20:42 编辑
这是我自己写的一个集合,现在用foreach遍历不了,如何才能实现用foreach遍历?
/// <summary>
/// 我的集合类
/// </summary>
class MyArrayList
{
int[] arr; // 4 3
int index = 0;
public MyArrayList(int capcity)
{
arr = new int[capcity];
}
/// <summary>
/// 动态数组的容量...
/// </summary>
public int Capcity
{
get
{
return arr.Length;
}
}
/// <summary>
/// 动态数组的有效元素的个数
/// </summary>
public int Count
{
get
{
return index;
}
}
public MyArrayList()
{
arr = new int[4];
}
public int this[int index]
{
get
{
return arr[index];
}
set
{
arr[index] = value;
}
}
/// <summary>
/// 增加方法
/// </summary>
/// <param name="value"></param>
public void Add(int value)
{
//先判断数组是否存满...
if (index == arr.Length - 1)
{
int[] newArr = new int[arr.Length * 2];
arr.CopyTo(newArr, 0);
arr = newArr;
}
arr[index] = value;
index++;
}
作者:
曾玉锋
时间:
2013-3-28 17:58
自定义集合
//自定义集合,可以存储object类型数据
public class MyArray : IEnumerable,IEnumerator
{
//用于存储数据
ArrayList list = new ArrayList();
//用于记录指针或者游标位置
int index = -1;
//得到IEnumerator
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
//得到当前对象
public object Current
{
get { return list[index]; }
}
//游标往后移动一位,如果没有超出list长度,则可以继续遍历,否则遍历结束
public bool MoveNext()
{
index++;
return index > list.Count - 1 ? false : true;
}
//将游标重置
public void Reset()
{
index = -1;
}
public void Add(object item)
{
list.Add(item);
}
}
//======================================================
自定义泛型集合
//自定义泛型集合
public class MyList<T> : IEnumerable<T>, IEnumerator<T>,IDisposable
{
//创建一个List<T>集合存储对象
private List<T> list = new List<T>();
int index = -1;
//添加对象
public void Add(T item)
{
list.Add(item);
}
//因为foreach需要迭代器IEnumerator类型,所以,把当前对象根据里氏转换原则,转换为其父类型
public IEnumerator<T> GetEnumerator()
{
return (IEnumerator<T>)this;
}
//这里也不清楚 是干嘛的!!!
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
//获得当前对象
public T Current
{
get {
return list[index];
}
}
//这个是释放对象吧,
public void Dispose()
{
//这里不清楚怎样释放对象资源,我觉得把里面的资源给设为null,然后调用垃圾回收器回收
//应该没啥问题了,还好了,这里看自己怎么写合适
this.list = null;
GC.Collect();
}
//...这个没弄明白 ????代码是我自己加的
object System.Collections.IEnumerator.Current
{
get { return Current; }
}
//根据游标的位置判断是否已经遍历完所有元素,如果没有遍历完,则可以继续遍历
public bool MoveNext()
{
index++;
return index > list.Count-1? false : true;
}
//将游标重置
public void Reset()
{
index = -1;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2