返回列表1和列表2中的项匹配的列表

Jas*_*wne 1 c# linq generics list

假设我有2个List<T>List1和List2,如下所示:

清单1:

[ID:1, Name:"item1"]
[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:4, Name:"item4"]
Run Code Online (Sandbox Code Playgroud)

清单2:

[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:5, Name:"item5"]
[ID:6, Name:"item6"]
Run Code Online (Sandbox Code Playgroud)

如何获取仅包含两个列表中的对象的列表?使用上面的例子,我想返回:

[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
Run Code Online (Sandbox Code Playgroud)

修改原始列表是可以的.最好的方法是什么?

Mat*_*eer 6

  var result = list1.Intersect(list2).ToList();
Run Code Online (Sandbox Code Playgroud)

最简洁.但请记住,它使用的默认相等比较器可能适用于您,也可能不适合您.如果没有,您可以提供自己的:

    public class MyEqualityComparer : IEqualityComparer<Foo>
    {
        public bool Equals(Foo x, Foo y)
        {
            return x.Id == y.Id;
        }

        public int GetHashCode(Foo obj)
        {
            return obj.Id.GetHashCode();
        }
    }

  var result = list1.Intersect(list2, new MyEqualityComparer()).ToList();
Run Code Online (Sandbox Code Playgroud)

  • @Broken:这里没有"肯定" - 只有当类型没有适当地重写Equals时才会***如果列表中存在实际的不同对象(而不是相等的列表).指出需要自定义相等比较器的*可能性*是很好的,但它不是*绝对*的要求. (2认同)