c# - 使用 LINQ 或 Lambda 从列表中删除实例?

标签 c# 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 接口(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/

相关文章:

使用本地数据库的 C# SQL 随机样本

c# - 使用什么技术来编写在语言之间切换的解析器?

c++ - 静态成员初始值设定项的 lambda 作用域

c# - 可空的 lambda 参数是否应该替换为透明的实现?

c# - 识别内存泄漏

c# - 检测 DataGridViewComboBoxCell 中同一项目的选择

c# - 将包含 where、group by、sum 和having 的 MySQL 语句转换为 Linq to Sql

c# - DataTable Select 与 List<T> LINQ 性能

c# - 如何在Unity C#脚本中使用System.Xml.Linq?

Scala:lambda 被传递给一个函数,被包装到 Runnable 中,并且之后不会被执行 - 发生了什么?