by wolfgang@gehirnwindung.de (Wolfgang)
Mai 19, 2010 20:25
Mit der Intersect-Erweiterungsmethode vergleicht man zwei Sequenzen des gleichen Typs miteinander und erhält als Ergebnis eine neue Sequenz, in der die Elemente der ersten Sequenz vorhanden sind, die auch in der 2. Sequenz vorkommen (Gegenteilig zur Except-Erweiterungsmethode). Dabei wird jedes Element nur einmal aufgeführt. Verglichen wird - wenn man nichts anderes angibt - mit EqualityComparer<T>.Default.

Ohne Intersect Extension Method kann man das Verhalten in etwa so nachbilden
private List<T> Intersect<T>( List<T> list1, List<T> list2, EqualityComparer<T> comparer ) {
var ret = new List<T>( );
if( comparer == null ) comparer = EqualityComparer<T>.Default;
for( int i = 0; i < list1.Count; i++ ) {
if(
!ret.Contains( list1[i], comparer ) &&
list2.Contains( list1[i], comparer )
) {
ret.Add( list1[i] );
}
}
return ret;
}
Der Aufruf mit Erweiterungsmethode kann so erfolgen
list1.Intersect( list2 );
list1.Intersect( list2, EqualityComparer<T>.Default );