【问题标题】:Select elements of certain type from list (c#)从列表中选择某种类型的元素(c#)
【发布时间】:2013-06-20 06:27:05
【问题描述】:

我的主要课程中有一个“陷阱”列表。在子类“火焰”中,我想从该列表中删除某些元素。问题是,如何选择这些元素? 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 我卡住了:/

【问题讨论】:

标签: c# list oop


【解决方案1】:

您可以使用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;
}

【讨论】:

  • 返回值必须保持“真”。
  • 我得到一个 System.InvalidOperationException
  • 收藏已修改;枚举操作可能无法执行。
【解决方案2】:

如果我理解正确的话

form1.traps = form1.traps.OfType<Flame>()
             .Where(trap => trap.ID == ID && trap.pos <= pos)
             .ToList();

【讨论】:

  • 问题:“Trap”没有“pos”,只有“Flame”有
  • 我认为你的意思是 Where 不是 Select
  • @Urinprobe 如果您发布了这些课程,我们不会盲目回答。
  • 他们有很多代码,我不想让你阅读所有这些;)
猜你喜欢
  • 2017-03-30
  • 1970-01-01
  • 2020-08-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
相关资源
最近更新 更多