c#获取两个list的相同部分
时间: 2023-09-17 07:12:56 浏览: 64
要获取两个 List 中的相同部分,你可以使用 LINQ 的 `Intersect` 方法。下面是一个示例:
```csharp
List<int> list1 = new List<int> { 1, 2, 3, 4 };
List<int> list2 = new List<int> { 3, 4, 5, 6 };
List<int> commonItems = list1.Intersect(list2).ToList();
```
在上述代码中,`commonItems` 列表将包含 `list1` 和 `list2` 中相同的元素(3 和 4)。
如果你想要获取相同部分的其他类型的对象,你可以使用 `Intersect` 方法的重载版本,并提供自定义的 `IEqualityComparer` 来指定比较逻辑。例如,如果你有一个自定义类 `Person`,你可以按照特定的属性进行比较:
```csharp
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Person> list1 = new List<Person>
{
new Person { Name = "Alice", Age = 25 },
new Person { Name = "Bob", Age = 30 },
};
List<Person> list2 = new List<Person>
{
new Person { Name = "Bob", Age = 30 },
new Person { Name = "Charlie", Age = 35 },
};
List<Person> commonPeople = list1.Intersect(list2, new PersonComparer()).ToList();
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.Name == y.Name && x.Age == y.Age;
}
public int GetHashCode(Person obj)
{
return obj.Name.GetHashCode() ^ obj.Age.GetHashCode();
}
}
```
在上述代码中,`commonPeople` 列表将包含 `list1` 和 `list2` 中具有相同姓名和年龄的 Person 对象。
使用 `Intersect` 方法可以轻松地获取两个 List 的相同部分。根据你的需求,你可能需要进一步处理结果或使用其他方法来实现更复杂的逻辑。