首页 > 解决方案 > 如何使用 Linq IEnumerable 填充现有数组?

问题描述

我有一个包含 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] 
    }
}

但是我想在 Linq 中使用 Select 和 ForEach,但是 foreach 没有索引 i。

注意:我在游戏中制作了一个 Inventory UI Item Slot,所以一次只能在我的 UI 中看到角色内部的 20 个项目,它还包括分页。我目前正在做:

for (int i = 0; i < _slots.Count; i++)
    _slots[i].SetItem(i < InventoryItems.Count ? InventoryItems[i] : null);

以 setItem 作为副作用;

标签: c#linqfor-loopiteration

解决方案


只需省略nulls:

Integers = Database.Where(i => i != null).ToArray();

请注意,如果要nullint数组中检查,则需要将其设为int?(可空类型):

public int?[] Integers = new int[20];

public int?[] Database = new int[] {
  1, 2, 3, , ..., 1000
}

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

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


推荐阅读