我正在尝试从各种查询中维护一个独特模型列表.不幸的是,我们的模型的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具有相同ID均source和result,该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)
这将正确地从源中删除项目.
| 归档时间: |
|
| 查看次数: |
3466 次 |
| 最近记录: |