我正在尝试使用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;
}
}
答案 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