2012-05-16 8 views
11

tengo que averiguar si o no dos colecciones tienen ninguna intersección, la forma en que lo hice que está utilizando LINQ de "Join" para obtener la intersección de las dos colecciones y luego yo uso "Cualquier". Pero me pregunto, ¿hay otra forma más "elegante" de hacer esto?cualquier intersección de dos colecciones

Respuesta

14

Enumerable.Intersect es probablemente lo que usted está buscando.

De 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())... 
+0

Gracias! Realmente lo aprecio :) –

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

Esto supone una implementación "adecuada" de la igualdad y código hash para los miembros de su colección (que es por ejemplo el caso de las primitivas), de lo contrario se puede pasar una costumbre IEqualityComparer .

1

Aquí es un método de extensión que usamos:

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