C#列表,Foreach和类型

时间:2012-06-26 09:13:28

标签: c#

我想知道是否有一个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的重载,或者另一个可能对我有帮助的片段?我希望程序员能够轻松地对列表进行排序,只获取他们需要的类型。

2 个答案:

答案 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;
    }
}