我有一些学校的工作要练习一些概念,如泛型,委托和接口。整个项目是使用T数组构建一个自定义列表类。该类还应该实现IEnumerable,并具有一个结构,即IEnumerator。我只关注这里的Add方法。
class MyList<T> : IEnumerable
{
private static readonly T[] arrayStarter = new T[1];
private int capacity = 1;
private int currentItems = 1;
public T[] TList { get; set; }
public MyList()
{
TList = arrayStarter;
TList[0] = default(T);
}
public T[] Add(T[] tArray, T item)
{
T[] temp = new T[++capacity];
for (int i = 0; i < tArray.Length; i++)
temp[i] = tArray[i];
temp[tArray.Length] = item;
currentItems++;
return temp;
}
}当我创建列表的一个实例时,我想使用该方法添加一个项目,它如下所示:
MyList<int> m = new MyList<int>();
m.TList = m.Add(m.TList, 5);
m.TList = m.Add(m.TList, 7);
m.TList = m.Add(m.TList, 13);
m.TList = m.Add(m.TList, 15);我确信有一个更好的方法来制作定制清单,我希望有人对这件事有一个很好的洞察力。
发布于 2017-10-05 12:42:25
如果您查看List<>在ReferenceSource中或使用ILSpy中的Add()方法实现,您将看到以下内容:
private int _size;
private T[] _items;
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}
private void EnsureCapacity(int min)
{
if (this._items.Length < min)
{
int num = (this._items.Length != 0) ? (this._items.Length * 2) : 4;
if (num > 2146435071)
{
num = 2146435071;
}
if (num < min)
{
num = min;
}
this.Capacity = num;
}
}https://stackoverflow.com/questions/46585788
复制相似问题