有没有一种更简单的方法可以在ListItemCollection上预成型投影

本文关键字:ListItemCollection 投影 成型 方法 一种 更简单 有没有 | 更新日期: 2023-09-27 17:59:01

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

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

任何想法

有没有一种更简单的方法可以在ListItemCollection上预成型投影

普通的旧迭代怎么样?

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

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

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

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

  • http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx

删除和读取集合中的项是愚蠢的,因为这是完全不必要的。

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

foreach (ListItem item in listbox.Items)) {
  item.Selected = condition(item);
}
相关文章:
  • 没有找到相关文章