1

我是 LINQ 的新手,并试图掌握它。

到目前为止,它对于各种事情都很有用,例如减少所需的代码,例如.ForEach()在每个对象上运行函数时。

现在我试图从主列表中获取所有对象的列表,当它们的IsMouseOver()函数返回 true 时。

作为标准foreach,它看起来像这样:

this.m_EntHovered.Clear();
foreach (EntEditor ent in this.m_EntAll)
{
    if (ent.IsMouseOver(mousePos))
        this.m_EntHovered.Add(ent);
}

但是我想使用 LINQ 来缩短它,但是我能得到的最短时间并没有缩短多少:

this.m_EntHovered = (from ent in this.m_EntAll
                    where ent.IsMouseOver(input)
                    select ent).ToList<EntEditor>();

有没有更好的方法来实现我所追求的或者我做得很好?

4

1 回答 1

4

不一定有更好的方法,但您可以通过以下方式更简洁地编写它:

this.m_EntHovered = this.m_EntAll.Where(ent => ent.IsMouseOver(input)).ToList();

但是请注意,这与您的原始列表不同,因为您正在分配一个新列表,而不是向现有列表添加项目。要获得相同的行为(可能不需要),您可以执行以下操作:

this.m_EntHovered.Clear();
this.m_EntHovered.AddRange(this.m_EntAll.Where(ent => ent.IsMouseOver(input)));
于 2013-05-23T20:13:18.000 回答