我想知道是否有一个foreach版本仅检查特定类型并返回它。
例如,考虑这个类树:
org.clixel.ClxBasic - > org.clixel.ClxObject - > org.clixel.ClxSprite - > WindowsGame1.test
然后考虑这段代码
public List<ClxBasic> objects = new List<ClxBasic>();
foreach(GroupTester tester in objects)
{
tester.GroupTesterOnlyProperty = true;
}
tester.GroupTesterOnlyProperty是在GroupTester中创建的属性。有没有办法让像这样的工作,比如foreach的重载,或者另一个可能对我有帮助的片段?我希望程序员能够轻松地对列表进行排序,只获取他们需要的类型。
答案 0 :(得分:8)
您可以对IEnumerable<T>
个对象使用OfType<T>
扩展名方法。
你的循环可能如下所示:
foreach(GroupTester tester in objects.OfType<GroupTester>())
{
tester.GroupTesterOnlyProperty = true;
}
注意:这假设GroupTester
继承自ClxBasic
。
答案 1 :(得分:3)
foreach(GroupTester tester in objects.OfType<GroupTester>())
{
tester.GroupTesterOnlyProperty = true;
}
根据@ThePower的建议(然后删除),您可以迭代所有对象并明确检查类型:
foreach(var tester in objects)
{
if (tester is GroupTester)
{
(tester as GroupTester).GroupTesterOnlyProperty = true;
}
}