我有一个列表List<Building> playersBuildings
包含所有来自Bulilding
类的对象,我遇到了一些对我来说很不直观的东西。Foreach cast skip?
以下代码:
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'做引擎盖下是'is'测试,随后铸造。这不会改变这个答案的有效性(这是我会做的),只是指出OP,他几乎是在正确的轨道上,只是解决方案变得隐藏起来。 https://referencesource.microsoft.com/System.Core/R/58e46ed059174950.html – pinkfloydx33