c# - 如何在没有空值的情况下在 Linq 中实现查询?
问题描述
我正在努力了解我是否对这个 Linq 查询做得正确。不幸的是,我是新手,使用 lambda 表达式仍然有很多问题。
m_ItemList
包含不同的列表GameObject
:
Fruit
对象bool Value;
Cars
对象bool Bought;
- 其他
这些对象具有不同的脚本行为,我只想隔离这些拥有脚本的人Cars
并检索哪些拥有bool
var on true
。这是我首先创建的查询。
itemBought = m_ItemList.Where(x => x.GetComponent<Cars>().Bought).ToList();
显然,这给了我一个异常的问题,因为不是每个人都Cars
附加了脚本组件。
因此我找到了解决方案:
itemBought = m_ItemList.Where(x => x.GetComponent<Cars>()).Where(x => x.GetComponent<Cars>().Bought).ToList();
这很好用,但很难看到,我什至不确定这是实现它的最佳方式(也许性能也很差)。
有什么帮助吗?
解决方案
GetComponent
是相对昂贵的操作,所以我会尝试每个对象只调用一次。因此,选择 的结果GetComponent
,过滤掉具有错误值的空值和非空Bought
值:
itemBought = m_ItemList.Select(x => x.GetComponent<Cars>())
.Where(c => c != null && c.Bought == true)
.ToList();
如果您可以使用itemBought
类型List<Cars>
或List<MonoBehaviour>
其他类似的东西,这将有效,并且避免需要GetComponent<Cars>
在后面的行中使用
推荐阅读
- pivot - TradingView 枢轴反转策略
- azure-active-directory - 如何使用 MSAL.NET 处理多租户守护程序服务应用程序的 AppTokenCache
- node.js - puppeteer 不能在里面点击
- excel - 使用 Excel VBA 关闭变量工作簿
- windows - 命令行挂起,KDiff3 无法使用 git mergetool 打开
- php - 基于 laravel 路由参数的中间件
- flutter - Why is FutureBuilder called multiple times?
- r - 在 R 中使用 diff 和 cumsum
- angular - Angular Component Dynamic Compile - ng-content with select 不起作用
- curl - 在 Terraform 数据中保存 JS 文件的 Curl 产生 JSON 错误