首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -使用数组创建自定义列表时的最佳实践是什么?

C# -使用数组创建自定义列表时的最佳实践是什么?
EN

Stack Overflow用户
提问于 2017-10-05 12:35:29
回答 2查看 342关注 0票数 0

我有一些学校的工作要练习一些概念,如泛型,委托和接口。整个项目是使用T数组构建一个自定义列表类。该类还应该实现IEnumerable,并具有一个结构,即IEnumerator。我只关注这里的Add方法。

代码语言:javascript
复制
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;
    }
}

当我创建列表的一个实例时,我想使用该方法添加一个项目,它如下所示:

代码语言:javascript
复制
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);

我确信有一个更好的方法来制作定制清单,我希望有人对这件事有一个很好的洞察力。

EN

Stack Overflow用户

发布于 2017-10-05 12:42:25

如果您查看List<>ReferenceSource中或使用ILSpy中的Add()方法实现,您将看到以下内容:

代码语言:javascript
复制
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;
    }
}
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46585788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档