在我的C#
程序中,我创建了一个字符串数组:
var arrayTest = new string[20];
我需要在其中复制一些字符串,我从包含10个字符串的List
中检索。
arrayTest = listTest.ToArray();
这样可行,但.ToArray()
会根据列表中元素的数量更改数组的维度。
我需要保持相同的大小(20)并且有10个字符串和10个null(或者任何值......)
除了循环listTest
之外,还有办法实现这个吗?
答案 0 :(得分:3)
假设您的列表是通用的,您可以使用其List<T>.CopyTo()
方法:
listTest.CopyTo(arrayTest);
而不是创建另一个数组的其他答案只是从它复制然后扔掉它。
即使对于非通用列表,大多数此类都有Copy
个方法,这些方法同样允许您将数据直接复制到目标数组中,而不是先调用ToArray
。
答案 1 :(得分:2)
您应该使用Array.Copy或List<T>.CopyTo
// You can copy either 'List<T>' or 'Array' by using this
Array.Copy(listTest.ToArray(), arrayTest, listTest.Length);
启发的以下方法
// 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。我已经解释了那里的所有代码。