c# - Foreach Actor 跳过?

标签 c# foreach casting

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

相关文章:

php - $query->andWhere() 中的 Foreach 语句

xcode - self.navigationController.topViewController 作为 HomeViewController

java - 基于参数的通用转换

c++ - c-casting to type 反对 c-casting to type's reference

c# - 如何处理同时用于桌面和 Web 的库中的静态变量?

c# - 从 .NET 应用程序静默打印 PDF 文件

c# - 如何在 C++ 中调用从 C# 返回字符串的函数?

php - 重组php数组

c# - 使用 Xamarin 进行光学字符识别

java - 我如何/可以在 Java 中使用 Hashmap 编写 for each 循环?