C# .ToArray()更改数组的维度

C# .ToArray()更改数组的维度,c#,arrays,string,C#,Arrays,String,在我的C程序中,我创建了一个字符串数组: var arrayTest = new string[20]; 我需要在其中复制从包含10个字符串的列表中检索到的一些字符串 arrayTest = listTest.ToArray(); 这可以工作,但.ToArray()会根据列表中的元素数更改数组的维度 我需要保持相同的大小(20),并有10个字符串和10个空值(或任何值…) 除了循环listTest之外,还有其他方法可以完成此任务吗?使用以下方法: 这不会更改要复制到的阵列的大小 一篇关于上述

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

var arrayTest = new string[20];
我需要在其中复制从包含10个字符串的
列表中检索到的一些字符串

arrayTest = listTest.ToArray();
这可以工作,但
.ToArray()
会根据列表中的元素数更改数组的维度

我需要保持相同的大小(20),并有10个字符串和10个空值(或任何值…)

除了循环
listTest
之外,还有其他方法可以完成此任务吗?

使用以下方法:

这不会更改要复制到的阵列的大小

一篇关于上述方法的好文章。这是非常有用的

还有,看看这个。我已经解释了那里的所有代码。

您应该使用或


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

假设您的列表是通用的,您可以使用其方法:

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


即使对于非泛型列表,在大多数此类类上也有
Copy
方法,它们同样允许您将数据直接复制到目标数组中,而不是首先调用
ToArray

您链接了MSDS的中文版本这是剽窃。。。这是达米恩,不信者,谁张贴了最好的答案。已经有一个关于这件事的元帖子在病毒中传播:@FᴀʀʜᴀɴAɴᴀᴍ 我看到了你发布的链接,我该怎么办?删除不信者Damien_的答案的四行?我用可行的解决方案发布了答案,以及OP使用的代码不起作用的原因。然后我看到了一个更好的方法,所以我列出了解决方案所有者,并将其添加为替代品。@J3soon“完成了什么”就完成了,我认为OP不会太快再次访问它。因为您的答案是公认的,所以请将该解决方案也保留在其中,不要删除它,但以后请尝试避免:)调用
arrayTest=listTest.ToArray()
不会更改原始数组的维度。它完全是在创造一个新的。如果您维护对原始数组的引用,您将看到它仍然有20个项。我不知道所有集合都有该方法+1.
Array.Copy(listTest.ToArray(), 0, arrayTest, 0, listTest.Count);
// 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)
arrayTest = listTest.ToArray();
listTest.CopyTo(arrayTest);