有没有一种更简单的方法可以在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>());
}
必须清除我现有的收藏并重新添加内容似乎很愚蠢。
任何想法
普通的旧迭代怎么样?
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);
}