Подтвердить что ты не робот

Любое пересечение в двух коллекциях

Мне нужно выяснить, имеют ли две коллекции какое-либо пересечение, как я это сделал, используя LINQ "Join", чтобы получить пересечение двух коллекций, а затем я использую "Any". Но мне интересно, есть ли еще более "элегантный" способ сделать это?

4b9b3361

Ответ 1

Enumerable.Intersect - это, вероятно, то, что вы ищете.

Из MSDN:

int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
IEnumerable<int> both = id1.Intersect(id2);
if(both.Any())...

Ответ 2

bool intersects = collection1.Intersect(collection2).Any();

Это предполагает "подходящую" реализацию равенства и hashcode для членов вашей коллекции (например, пример для примитивов), в противном случае вы можете передать пользовательский IEqualityComparer.

Ответ 3

Вот метод расширения, который мы используем:

public static bool IntersectAny<T>(this IEnumerable<T> first, IEnumerable<T> second, IEqualityComparer<T> comparer = null) {
    return first.Intersect(second, comparer).Any();
}