c# - 如何使用 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 作为副作用;
解决方案
只需省略null
s:
Integers = Database.Where(i => i != null).ToArray();
请注意,如果要null
在int
数组中检查,则需要将其设为int?
(可空类型):
public int?[] Integers = new int[20];
public int?[] Database = new int[] {
1, 2, 3, , ..., 1000
}
事实上,Integer
可以int[]
,因为您选择非空值:)
注意:使用代码时,您很容易出现索引超出范围异常,因为您将相同的索引应用于两个数组。
推荐阅读
- google-chrome - 扩展主机名以允许 Iframing?
- laravel - 使用 Laravel 文件管理器显示图像时出现问题。路线问题
- javascript - 在 NODE JS 中使用 Axios 在无限循环内调用异步 API
- php - 如何将日期转换为字符串 DD MM YYY
- java - 如何在 Swagger UI 中配置 SpringBoot 的登录机制?
- c# - 无法从机器人应用程序视觉工作室点击控制器
- assembly - 从汇编中的系统调用打印返回值
- python - 不完整的散点图图例:当前点的大小不足
- flutter - 键盘打开时如何避免底部溢出(在警报对话框中)
- angular - Angular 在 ngAfterViewInit 或 ngOnInit 中激活 @HostListener