0

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

4

2 回答 2

8

您可以使用对象的OfType<T>扩展方法IEnumerable<T>

您的循环可能如下所示:

foreach(GroupTester tester in objects.OfType<GroupTester>())
{
    tester.GroupTesterOnlyProperty = true;
}

注意:这假设GroupTester继承自ClxBasic.

于 2012-06-26T09:14:59.433 回答
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;
    }
}
于 2012-06-26T09:16:51.487 回答