【发布时间】:2017-05-04 10:03:21
【问题描述】:
我正在尝试使用Array.Copy 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 和长度,以及数组的下界
可以使用下面的吗?我的单元测试通过了,现在:
public void EnlargeIfNeeded()
{
if (Size == Capacity)
{
Capacity = 2 * Capacity;
var dest = new int[Capacity];
Array.Copy(Nodes, dest, Capacity/2);
Nodes = dest;
}
}
【问题讨论】:
-
您是否期望将字段
Capacity加倍会影响阵列Nodes的实际容量?Array.Copy当然不会那样做。 -
是的,我的最终目的是使阵列容量翻倍。
-
我建议您仔细阅读
Array.Copy的文档。您目前没有正确使用它。您可能想改用Nodes = Array.Resize(Nodes, Capacity)。但是你为什么要彻底改造List<T>? -
谢谢,我不想重新发明任何东西。我只是想只使用语言内置的基础知识。