現在我來了一個階段,將所有數據作爲緩存(對象)中的一個列表,我接下來要做的就是從列表中刪除一些實例。使用LINQ或Lambda從列表中刪除實例?
通常情況下,我會做消除這樣的:
List<T> list;
List<T2> toBeRemovedItems;
// populate two lists
foreach(T2 item in toBeRemovedItems)
{
list.Remove(delegate(T one) {
// build a condition based on item
// return true or false
});
}
更具體地講,其實我建立或填充動態類(不是一個正式的定義的類)的toBeRemvoedItems名單。例如,T艙是像MyClass的和代碼去除是:
class MyClass<C> {
public string Value1 { get; set; }
public int Value2 { get; set; }
public C ObjectC { get; set; }
}
....
List<MyClass<C>> list;
// populate list
// populate toBeRemovedItems. Here is an example of hard-coded codes:
var toBeRemovedLItems = new[] {
new { Value1="a", Value2 = 1},
new { Value2="x", Value2 = 10},
...
};
// toBeRemovedItems may be the result of Select from a collection
foreach(var item in toBeRemovedLItems)
{
list.Remove(delegate(MyClass one) {
return one.Value1 = item.Value1 && one.Value2 < item.Value2;
});
}
我試圖從MSDN IEnumerable
界面搜索Remove()
方法,但我找不到Remove()
有方法(它是有道理的IEnumerable
僅用於枚舉)。在List類中,有幾個超載的方法。我不確定是否有其他方法通過使用LINQ或Lambda表達式從列表中刪除項目?
順便說一句,我想過一種方法來對列表進行查詢,以獲取Where條件的子集或新的IEnumerable
列表,類似於從列表中移動項目。但是,我更喜歡從我的緩存列表中刪除項目,並且在某些情況下,我無法將類中的列表屬性重置爲新列表(例如專用集)。
看起來像一個笨蛋。那麼,基本上你提到了所有可能的方法在帖子本身... http://stackoverflow.com/questions/1120336/what-is-the-easiest-way-to-foreach-through-a-listt-removing-unwanted -objects – 2009-07-26 19:36:18