Если списки не слишком велики, самый простой способ сделать это - вызвать Contains
:
foreach(var item in list1) {
if (list2.Contains(item) {
//Do something
}
}
Вы можете сделать это быстрее, вызвав BinarySearch
, используя пользовательский IComparer<T>
, например:
class MyComparer : IComparer<YourClass> {
private MyComparer() { }
public static readonly MyComparer Instance = new MyComparer();
public int CompareTo(YourClass a, YourClass b) {
//TODO: Handle nulls
return a.SomeProperty.CompareTo(b.SomeProperty);
}
}
foreach(var item in list1) {
if (list2.BinarySearch(item, MyComparer.Instance) >= 0) {
//Do something
}
}
В .Net 3.5 вы можете сделать это быстрее, используя HashSet<T>
:
var hashset = new HashSet<YourClass>(list2);
foreach(var item in list1) {
if (hashset.Contains(item) {
//Do something
}
}
Если ваши списки очень большие, вы должны измерить производительность каждого варианта и выбрать соответственно.
В противном случае выберите один из первых вариантов, который является самым простым.