现在我来了一个阶段,将所有数据作为缓存(对象)中的一个列表,我接下来要做的就是从列表中删除一些实例。使用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