为什么我不能使用这个嵌套的lambda表达式?

Kyl*_*ten 3 c# lambda

我正在尝试从各种查询中维护一个独特模型列表.不幸的是,我们的模型的equals方法没有定义,所以我不能轻易使用哈希映射.

作为快速修复,我使用了以下代码:

public void AddUnique(
    List<Model> source,
    List<Model> result)
{
    if (result != null)
    {
        if (result.Count > 0
            && source != null
            && source.Count > 0)
        {
            source.RemoveAll(
                s => result.Contains(
                    r => r.ID == s.ID));
        }

        result.AddRange(source);
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.当我踏上throught的代码,我发现,即使我已经检查,以确保有至少一个Model具有相同IDsourceresult,该RemoveAll(Predicate<Model>)行不会更改的项目数source.我错过了什么?

Ree*_*sey 10

上面的代码甚至不应该编译,因为Contains期望a Model,而不是谓词.

您可以使用Any()代替:

source.RemoveAll(s => result.Any(r => r.ID == s.ID));
Run Code Online (Sandbox Code Playgroud)

这将正确地从源中删除项目.

  • 好家伙.显然`Contains <T>(这个IEnumerable <T>,Predicate <T>)`实际上是我们库里的一个扩展方法,里面有一个巨大的怪虫**.非常感谢你让我调查一下. (3认同)
  • 一定要喜欢巨大的怪物. (3认同)