CustomList类,在指定的索引处删除有什么好方法?

时间:2015-12-08 11:24:26

标签: c# arrays arraylist indexof

我创建了一个CustomList类,其中包含一些方法,如Add(),Set()和RemoveAt()。此CustomList类用于模仿List<>的行为。没有实际使用它的类。 在调试我的程序时,我注意到当我输入要删除的字符串的索引时,我的代码成功删除了该字符串。但是当我调用print方法时,它会双重打印数组中的最后一个字符串。我假设错误在RemoveAt()内而不是Print(),因为当没有调用RemoveAt()时,Print()完全正常。我想知道是否有人能指出我正确的方向。

class CustomList
{
    private int count;
    private String[] data;

    public int Count
    {
        get { return count; }
        set { value = count; }
    }
    public CustomList(int arrayNum)
    {
        data = new String[arrayNum];
    }
    public CustomList(): this(4)
    {
    }

    public void Add (String item)
    {
        if (count > data.Length)
        {
            String[] temp = new String[count * 2];
            for (int i = 0; i < data.Length; i++)
            {
                temp[i] = data[i];
            }
            data = temp;
        }
        data[count] = item;
        count++;
    }

    public int IndexOf (String item)
    {
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i].Contains(item))
            {
                return i;
            }
        }
        return -1;
    }

    public bool Contains (String item)
    {
        if (IndexOf(item) == -1)
        {
            return false;
        }
        return true;
    }

    public void RemoveAt(int index)
    {
        if (index < count && index >= 0)
        {
            Array.Copy(data, index + 1, data, index, Count - (index + 1));
            count--;
        }
    }

    public bool Remove(String item)
    {
        if (data.Contains(item))
        {
            int index = Array.IndexOf(data, item);
            RemoveAt(index);
            return true;
        }
        return false;
    }

    public void Print()
    {
        for (int i = 0; i < count; i++)
        {
            Console.WriteLine(data[i]);
        }
    }

我对你说的话有点困惑,@ germi。当我将大小设置为4并输入4个字符串时,它会成功打印数组中的4个项目: enter image description here

1 个答案:

答案 0 :(得分:1)

您的打印循环应该从0到count-1,而不是从0到count。如果您有3个项目(count == 3),那么这些项目的索引是0,1,2。

由于您实施Remove的方式,您只会因访问一个太多的项目而侥幸逃脱,这不会缩小数组(所以现在还有一个 - 该索引处的未使用元素。)

<=更改为<

此外,RemoveAt方法应该count--,而不是Count--