1

我的主要课程中有一个“陷阱”列表。在子类“火焰”中,我想从该列表中删除某些元素。问题是,如何选择这些元素?Trap 确实有其他具有不同属性的子类。

这是我到目前为止得到的(代码简化,来自“Flame.cs”):

public override Boolean collide()
{
    var flames = form1.traps.Where(trap => trap.ID == ID);
    foreach (Flame f in flames)
    {
        if (f.pos > pos)
        {
            form1.traps.Remove(f);
        }
    }
    return true;
}

我觉得我应该知道这一点,但是 atm 我被卡住了:/

4

2 回答 2

3

如果我理解正确

form1.traps = form1.traps.OfType<Flame>()
             .Where(trap => trap.ID == ID && trap.pos <= pos)
             .ToList();
于 2013-06-23T18:23:19.987 回答
3

您可以使用OfType扩展方法。

public override Boolean collide()
{
    var flames = form1.traps.Where(trap => trap.ID == ID)
                            .OfType<Flame>()
                            .Where(f => f.pos > pos)
                            .ToList();

    foreach (Flame flame in flames)
    {
        form1.traps.Remove(flame);
    }

    return true;
}
于 2013-06-23T18:22:06.783 回答