现在我要将所有数据作为缓存(对象)中的列表获取,接下来我要做的是从列表中删除一些实例。
通常,我会像这样删除:
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
接口(interface)中搜索 Remove()
方法,但我在那里找不到 Remove()
方法(IEnumerable
仅用于枚举是有道理的)。在 List 类中,有几个重载的 Remove(...)
方法。我不确定是否有其他方法可以使用 LINQ 或 Lambda 表达式从列表中删除项目?
顺便说一下,我想到了一种方法来对列表进行查询以获取子集或具有 Where 条件的新 IEnumerable
列表,类似于从列表中移动项目。但是,我更喜欢从我的缓存列表中删除项目,并且在某些情况下我无法将类中的列表属性重置为新列表(例如私有(private)集)。
最佳答案
您可以使用方法RemoveAll:
MyClass one; //initialize MyClass
list.RemoveAll(item => one.Value1 == item.Value1 && one.Value2 < item.Value2);
关于c# - 使用 LINQ 或 Lambda 从列表中删除实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185323/