Array.Copy异常

时间:2017-05-04 10:03:21

标签: c# arrays exception

我正在尝试使用Array增加数组的大小。复制C#内置static方法。 代码如下:

public class MyClass
{
    private int Capacity { get; set; }
    private int Size { get; set; }
    private int[] Nodes { get; set; }

    public MyClass()
    {
        Capacity = 5;
        Size = 0;
        Nodes = new int[Capacity];
    }

    public void EnlargeIfNeeded()
    {
        if (Size == Capacity)
        {
            Capacity = 2 * Capacity;
            Array.Copy(Nodes, Nodes, Capacity);
        }
    }
}

当调用方法EnlargeIfNeeded()时,它抛出以下异常:

  

system.argument.exception:源数组不够长。校验   srcIndex和length,以及数组的下限

使用以下内容是否可以?我的单元测试正在通过,现在:

    public void EnlargeIfNeeded()
    {
        if (Size == Capacity)
        {
            Capacity = 2 * Capacity;
            var dest = new int[Capacity];
            Array.Copy(Nodes, dest, Capacity/2);
            Nodes = dest;
        }
    }

2 个答案:

答案 0 :(得分:1)

您似乎只想要Array.Resize

另外,我建议摆脱Capacity成员,这样你就可以减少照顾自己的状态。 (nb:以下是干编码的,所以YMMV。)

public class MyClass
{
    private int Size { get; set; }
    private int[] Nodes { get; set; }

    public MyClass()
    {
        Size = 0;
        Nodes = new int[5];
    }

    public void EnlargeIfNeeded()
    {
        if (Size == Nodes.Length)
        {
            Array.Resize(ref Nodes, Nodes.Length * 2);
        }
    }
}

编辑:添加了缺少的ref关键字。

答案 1 :(得分:1)

如果您尝试调整数组大小,使用List集合可能是一种更好的方法,因为它本身以更有效的方式实现了数组大小调整。

https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx