gpt4 book ai didi

c# - Foreach Actor 跳过?

转载 作者:行者123 更新时间:2023-11-30 19:54:00 25 4
gpt4 key购买 nike

我有一些 List<Building> playersBuildings 的列表包含所有派生自 Bulilding 的对象类,我遇到了一些对我来说很不直观的东西。

以下代码:

foreach (Factory f in playersBuildings) {
f.Update (deltaTime);
}

尝试转换 playersBuildings 的每个元素至 Factory并产生 InvalidCastException 错误。虽然它有一定的意义,但在编写代码时我希望 foreach 只会忽略与指定类型不匹配的元素。

我首先想到的解决方案是:

foreach (Building f in playersBuildings) {
if ((f is Factory) == false)
continue;
(f as Factory).Update (deltaTime);
}

但我不喜欢必须使用 as关键词。每次我想用我的 f 做某事时都需要输入额外的 +10 个字符在它的迭代下令人沮丧。

有没有更优雅的方法来跳过不匹配正确类型的元素?

最佳答案

我建议 OfType() Linq 方法过滤掉所有 Factory 实例:

foreach (Factory f in playersBuildings.OfType<Factory>()) {
f.Update(deltaTime);
}

非 Linq 解决方案可以使用 ?. 运算符实现:

foreach (Building b in playersBuildings) {
(b as Factory)?.Update(deltaTime);
}

关于c# - Foreach Actor 跳过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44903384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com