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>());
}
似乎很难清除我现有的收藏并重新添加内容。
任何想法
答案 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
的方法,您可以对列表中的任何项目执行操作: