我是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>();
有没有更好的方法来实现我所追求的目标或者我做得很好?
答案 0 :(得分: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)));