2013-02-14 39 views
0

G'day all, 有沒有辦法對列表框的內容進行預先投影。 具體而言,我希望能夠做到這一點,而無需清除並添加我的列表框中的內容。 這是我目前擁有的內容。有沒有更簡單的方法來預製ListItemCollection上的投影?

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

簡單的舊迭代怎麼樣?

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

LINQ不是生命宇宙和一切的答案。尤其涉及在現有對象上設置屬性的那部分宇宙。

+0

我想說, LINQ讓我開心,這似乎是一個很好的答案,至少;-) – 2013-02-14 15:23:43

+0

@jon so linq!= 42 then – Terrance 2013-02-14 15:24:50

+1

@AdamHouldsworth:我說的是「LINQ讓我覺得我是忍者」;-) – Jon 2013-02-14 15:26:47

1

刪除和讀取集合中的項目是很愚蠢的,因爲它是完全不必要的。

你應該能夠把它簡化爲以下:

foreach (ListItem item in listbox.Items)) { 
    item.Selected = condition(item); 
} 
相關問題