0

大家好,有没有办法对列表框的内容进行投影。具体来说,我希望能够做到这一点,而不必清除并添加我的列表框的内容这是我目前拥有的。

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>());
}

必须清除我现有的收藏并重新添加内容似乎很愚蠢。

有什么想法吗

4

3 回答 3

4

普通的旧迭代呢?

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

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

于 2013-02-14T15:21:09.393 回答
1

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

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

foreach (ListItem item in listbox.Items)) {
  item.Selected = condition(item);
}
于 2013-02-14T15:21:33.093 回答
1
listbox.Items
      .Cast<ListItem>()
           .Where(x=> condition(x))
                .ToList()
                      .ForEach(item => item.Selected = true);

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

于 2013-02-14T15:31:35.887 回答