Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如何使用Linq IEnumerable填充现有数组?_C#_Linq_For Loop_Iteration - Fatal编程技术网

C# 如何使用Linq IEnumerable填充现有数组?

C# 如何使用Linq IEnumerable填充现有数组?,c#,linq,for-loop,iteration,C#,Linq,For Loop,Iteration,我有一个20项插槽的数组,它是空的 例如,我们只使用简单的int数组 public int[] Integers = new int[20]; 然后我有一个数据库,里面有很多项目 public int[] Database = new int[] { 1, 2, 3, , ..., 1000 } 我想把数据库中的一些项放到我的数组中 在紧急情况下,我可以这样做: // loop all my slots for (int = 0; i < Integers.Length; i+

我有一个20项插槽的数组,它是空的

例如,我们只使用简单的int数组

public int[] Integers = new int[20];
然后我有一个数据库,里面有很多项目

public int[] Database = new int[] {
    1, 2, 3, , ..., 1000
}
我想把数据库中的一些项放到我的数组中

在紧急情况下,我可以这样做:

// loop all my slots
for (int = 0; i < Integers.Length; i++) {

    // If database index of i is empty, then done this loop
    // correction: I'm putting null in case database type is not int
    if(Database[i] == null) {
        break;
    }
    // but when there's still something in database, fill it to current Integers[i]
    else {
        Integers[i] = Database[i] 
    }
}
//循环我的所有插槽
for(int=0;i
但是我想在Linq中使用Select和ForEach,但是ForEach没有索引I

注意:我正在游戏中制作一个库存UI项目槽,因此一次只能在我的UI中看到角色内部的20个项目,它还包括分页。我目前正在做:

for (int i = 0; i < _slots.Count; i++)
    _slots[i].SetItem(i < InventoryItems.Count ? InventoryItems[i] : null);
for(int i=0;i<\u slots.Count;i++)
_插槽[i].SetItem(i

以setItem作为副作用

只需省略
null
s:

Integers = Database.Where(i => i != null).ToArray();
请注意,如果要在
int
数组中检查
null
,则需要将其设置为
int?
(可为null的类型):

实际上,
Integer
可以是
int[]
,因为您选择了非空值:)


注意:对于现有代码,您很容易索引超出范围异常,因为您对两个数组应用相同的索引。

只需忽略
null
s:

Integers = Database.Where(i => i != null).ToArray();
请注意,如果要在
int
数组中检查
null
,则需要将其设置为
int?
(可为null的类型):

实际上,
Integer
可以是
int[]
,因为您选择了非空值:)



注意:使用现有代码,您很容易索引超出范围异常,因为您对两个数组都应用了相同的索引。

我不确定您要求的是什么?您能告诉我们为什么不使用
var Integers=Database.Concat(Enumerable.Repeat(0,20)).Take(20).ToArray()?这将从
数据库中获取前20个条目
,并根据需要填充零。我可以做
整数吗。选择((x,I)=>{x=Database[I];返回x;})
;这是可能的吗?你试过我第一次评论中的建议了吗?我暂时退出,稍后再试,但我认为如果我把它放在20大小的数组中可能会出错。我不确定你要的是什么?你能告诉我们为什么你不想使用
var Integers=Database.Concat(Enumerable.Repeat(0,20)).Take(20.ToArray()?这将从
数据库中获取前20个条目
,并根据需要填充零。我可以做
整数吗。选择((x,I)=>{x=Database[I];返回x;})
;这可能吗?你试过我第一次评论中的建议了吗?我暂时退出,稍后再试,但我认为如果我把它放在20码的数组中可能会出错。索引超出范围注释非常有用,谢谢,我一直在想为什么我会一直得到它。@Kevintanudja如果我的回答对你有帮助,你应该接受它(左边绿色复选标记)和可选的向上投票:)@KevinTanudjaja我不能,你必须解释你想要什么和什么不起作用。这应该是另一个问题,而不是注释。好的,对不起,您的代码
Integers=Database.Where(i=>i!=null).ToArray()会出错吗?将结果放入20大小的数组可以吗?@KevinTanudjaja不将
整数初始化为空数组,只需使用此代码初始化即可。如果你按照你的方式初始化它,你需要调整它的大小。哦,索引超出范围注释非常有用,谢谢,我一直想知道为什么我会一直得到它。@Kevintanudja如果我的答案对你有帮助,你应该接受它(左边绿色的复选标记)并且可以选择向上投票:)@Kevintanudja我不能,你必须解释你想要什么,什么不起作用。这应该是另一个问题,而不是注释。好的,对不起,您的代码
Integers=Database.Where(i=>i!=null).ToArray()会出错吗?将结果放入20大小的数组可以吗?@KevinTanudjaja不将
整数初始化为空数组,只需使用此代码初始化即可。如果你用你的方式初始化它,你需要调整它的大小。