我有一些 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/