Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将项目从列表复制到具有固定大小的数组_C#_Arrays_List - Fatal编程技术网

C# 将项目从列表复制到具有固定大小的数组

C# 将项目从列表复制到具有固定大小的数组,c#,arrays,list,C#,Arrays,List,我有一个列表,它返回n个值 我必须将这些值存储到一个固定长度为10 如果超过10个项目,则会切断电源 如果少于10个项目,则可用数字0 我的方法 int[] result = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; List<int> items = Enumerable.Range(1, 5).ToList(); items.CopyTo(result); // 1,2,3,4,5,0,0,0,0,0 int[]result={0,0,0,0,0,

我有一个
列表
,它返回n个值

我必须将这些值存储到一个固定长度为
10

  • 如果超过10个项目,则会切断电源
  • 如果少于10个项目,则可用数字
    0
我的方法

int[] result = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
List<int> items = Enumerable.Range(1, 5).ToList();
items.CopyTo(result); // 1,2,3,4,5,0,0,0,0,0
int[]result={0,0,0,0,0,0,0,0,0};
列表项=可枚举的.Range(1,5).ToList();
items.CopyTo(结果);//1,2,3,4,5,0,0,0,0,0
但这在项目
>10中失败

有没有一种方法可以立即或至少用不到3行代码完成此操作?

您可以使用以下方法剪切阵列:

你也许也想读一些关于你的东西。这跳过了记录

Enumerable.Range(1, inputCount * 2).Skip(10).Take(inputCount).ToList().CopyTo(result);
// 10,11,12,13,14,15,16,17,18,19

// 20 items as input. skipped 10
foreach (var item in result)
{
    Console.WriteLine(item);
}
您可以使用与属性相结合的方法始终选择最多可容纳到数组中的元素:

var result = new int[10];
var items = Enumerable.Range(1, 11);
items.Take(result.Length).ToList().CopyTo(result);
当小于
result.Length
项(本例中为10项)时,空插槽将填充
default(int)
,即
0

List items=Enumerable.Range(1,5).ToList();
List<int> items = Enumerable.Range(1, 5).ToList();
int[] result = items.Take(10).Concat(Enumerable.Repeat(0, Math.Max( 10 - items.Count,0))).ToArray();
int[]result=items.Take(10).Concat(Enumerable.Repeat(0,Math.Max(10-items.Count,0))).ToArray();
您可以删除换行符…不,如果OP列表中的项目超过10个,则此代码无效。
items.CopyTo(0,result,0,Math.Min(items.Count,result.Length))
。超载FTW.@Dr.Snail我撤回了我的最后一票。请注意,您的3行代码中,只有2行是“将列表项复制到数组”,另一行只是初始化列表,您可能会将其作为参数接收,如果这是一种方法,好的,我不知道为什么不将可枚举项复制到固定大小的现有数组中。或者你是说用
.ToArray()
代替
.ToList()
?是的。我不认为他指的是现有的数组,因为无论如何它都会被覆盖。所以我想说,
ToArray()
而不是
ToList().CopyTo(result)
就足够了。@Adrian-hmm,我相信OP想将枚举表的项复制到一个固定大小的现有数组中,如果枚举表包含的项多于数组的大小,
.CopyTo()
将失败(
ArgumentException
将被抛出)。我
.ToList()
ed这样我就可以访问
.CopyTo()
,我确实可以使用
.ToArray()
,通过修改最后一行到
items.Take(result.Length).ToArray().CopyTo(result,0)
请详细说明你的答案。只有代码的答案被认为是低质量的。
List<int> items = Enumerable.Range(1, 5).ToList();
int[] result = items.Take(10).Concat(Enumerable.Repeat(0, Math.Max( 10 - items.Count,0))).ToArray();