有没有更简单的方法在ListItemCollection上执行投影?

时间:2013-02-14 15:18:12

标签: c# linq optimization webforms projection

G'day all, 有没有办法在列表框的内容上执行投影。 具体来说,我希望能够做到这一点,而无需清除并添加我的列表框的内容 这就是我现在拥有的。

public static void SetSelectedWhere(this ListBox listbox, Func<ListItem,bool> condition) 
{
   var queryableList = listbox.Items.Cast<ListItem>();
   queryableList.Select(x=>condition(x)?x.Selected:x.Selected=false);
   listbox.Items.Clear();
   listbox.Items.AddRange(queryableList.ToArray<ListItem>());
}

似乎很难清除我现有的收藏并重新添加内容。

任何想法

3 个答案:

答案 0 :(得分:4)

普通的旧迭代怎么样?

foreach (ListItem item in listbox.Items)
{
    item.Selected = condition(item);
}

LINQ不是宇宙和万物生命的答案。特别是涉及在现有对象上设置属性的宇宙部分。

答案 1 :(得分:1)

删除和阅读集合中的项目是愚蠢的,因为它完全没必要。

您应该能够将其简化为以下内容:

foreach (ListItem item in listbox.Items)) {
  item.Selected = condition(item);
}

答案 2 :(得分:1)

listbox.Items
      .Cast<ListItem>()
           .Where(x=> condition(x))
                .ToList()
                      .ForEach(item => item.Selected = true);

List<T>有一个名为ForEach的方法,您可以对列表中的任何项目执行操作: