.ToArray()改变了我的数组的维度

时间:2016-03-25 11:23:56

标签: c# arrays string

在我的C#程序中,我创建了一个字符串数组:

var arrayTest = new string[20];

我需要在其中复制一些字符串,我从包含10个字符串的List中检索。

arrayTest = listTest.ToArray();

这样可行,但.ToArray()会根据列表中元素的数量更改数组的维度。

我需要保持相同的大小(20)并且有10个字符串和10个null(或者任何值......)

除了循环listTest之外,还有办法实现这个吗?

3 个答案:

答案 0 :(得分:3)

假设您的列表是通用的,您可以使用其List<T>.CopyTo()方法:

listTest.CopyTo(arrayTest);

而不是创建另一个数组的其他答案只是从它复制然后扔掉它。

即使对于非通用列表,大多数此类都有Copy个方法,这些方法同样允许您将数据直接复制到目标数组中,而不是先调用ToArray

答案 1 :(得分:2)

您应该使用Array.CopyList<T>.CopyTo

// You can copy either 'List<T>' or 'Array' by using this
Array.Copy(listTest.ToArray(), arrayTest, listTest.Length);

或受Damien_The_Unbeliever

启发的以下方法
// You can copy 'List<T>' by using this, but it doesn't require a 'ToArray()' function
// It's better to use this if you're copying with 'List<T>'
listTest.CopyTo(arrayTest)

使用上述代码将listText的内容复制到arrayTest,并且不会修改arrayTest内的其余值。

但是应确保arrayTest的大小与listTest的长度相同或更长,否则会引发异常。

为什么您的代码不起作用

您拥有的原始代码:

arrayTest = listTest.ToArray();

这使得arrayTest指向一个全新的引用,因此大小20没有任何意义,因为长度为20的数组将在之后被垃圾收集。将20更改为不同的尺寸仍然会产生相同的结果。

答案 2 :(得分:0)

使用Array.Copy()方法:

Array.Copy(listTest.ToArray(), 0, arrayTest, 0, listTest.Count);

这不会改变您要复制的数组的大小。

Here's关于上述方法的好文章。这非常有用。

另外,请看一下这个Fiddle。我已经解释了那里的所有代码。