最近在学C#,就手动写了一个IList
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WorkTwo
{
/// <summary>
/// 自定义List
/// </summary>
/// <typeparam name="T">泛型</typeparam>
public class MyList<T>
{
//数据
private T[] datas;
/// <summary>
/// 总条数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 当前下标
/// </summary>
private int index;
/// <summary>
/// 初始化
/// </summary>
public MyList()
{
this.datas = new T[16];
this.Count = 0;
this.index = -1;
}
/// <summary>
/// 获取下标值
/// </summary>
/// <param name="index">下标</param>
/// <returns></returns>
public T Get(int index)
{
if(index > this.datas.Length || index < 0)
{
throw new Exception("数组越界");
}
return this.datas[index];
}
/// <summary>
/// 获取元素下标
/// </summary>
/// <param name="value">元素值</param>
/// <returns></returns>
public int IndexOf(T value)
{
for(int i = 0; i <= this.index; i++)
{
if(this.datas[i].Equals(value))
{
return i;
}
}
return -1;
}
/// <summary>
/// 添加元素
/// </summary>
/// <param name="value">元素值</param>
public void Add(T value)
{
//当空间满时,则扩大原来的2倍
if(this.index >= this.datas.Length)
{
T[] copys = new T[datas.Length];
Array.Copy(this.datas, copys, this.datas.Length);
this.datas = new T[this.datas.Length * 2];
Array.Copy(copys, this.datas, copys.Length);
}
this.datas[++this.index] = value;
this.Count++;
}
/// <summary>
/// 移除元素
/// </summary>
/// <param name="value">元素值</param>
public void Remove(T value)
{
int index = IndexOf(value);
if(index != -1)
{
for (int i = index + 1; i <= this.index; i++)
{
this.datas[i - 1] = this.datas[i];
}
this.index--;
this.Count--;
}
}
/// <summary>
/// 清空值
/// </summary>
public void Clear()
{
this.index = -1;
this.Count = 0;
Array.Clear(this.datas, 0, this.datas.Length);
}
}
}