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

CustomList class, what is a good way to remove at a specified index?

我创建了一个 CustomList class,其中包含一些方法,例如 Add()、Set() 和 RemoveAt()。此 CustomList class 旨在模仿 List<> class 的行为,而无需实际使用它。 在调试我的程序时,我注意到当我输入要删除的字符串的索引时,我的代码成功删除了该字符串。但是当我调用 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 个项目:

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

由于您实施 Remove 的方式,您只能访问过多的项目,这不会缩小数组(因此仍然有一个现在未使用的元素位于那个索引)。

<= 更改为 <

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