(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Enumerable.Intersect<TSource>-Methode (IEnumerable<TSource>, IEnumerable<TSource>)

Erzeugt die Schnittmenge zweier Sequenzen mithilfe des Standardgleichheitsvergleichs zum Vergleichen von Werten.

Namespace:  System.Linq
Assembly:  System.Core (in System.Core.dll)

public static IEnumerable<TSource> Intersect<TSource>(
	this IEnumerable<TSource> first,
	IEnumerable<TSource> second
)

Typparameter

TSource

Der Typ der Elemente der Eingabesequenzen.

Parameter

first
Typ: System.Collections.Generic.IEnumerable<TSource>
Ein IEnumerable<T>, dessen unterschiedliche Elemente auch in second vorhanden sind, wird zurückgegeben.
second
Typ: System.Collections.Generic.IEnumerable<TSource>
Ein IEnumerable<T>, dessen unterschiedliche Elemente auch in der ersten Sequenz vorhanden sind, wird zurückgegeben.

Rückgabewert

Typ: System.Collections.Generic.IEnumerable<TSource>
Eine Sequenz, die die Elemente enthält, die die Schnittmenge von zwei Sequenzen bilden.

Hinweis zur Verwendung

In Visual Basic und C# können Sie diese Methode als Instanzenmethode für ein beliebiges Objekt vom Typ IEnumerable<TSource> aufrufen. Bei Verwendung der Syntax für Instanzenmethoden lassen Sie den ersten Parameter aus. Weitere Informationen finden Sie unter Erweiterungsmethoden (Visual Basic) und Erweiterungsmethoden (C#-Programmierhandbuch).

AusnahmeBedingung
ArgumentNullException

first oder second ist null.

Diese Methode wird mit verzögerter Ausführung implementiert. Der Wert der sofortigen Rückgabe ist ein Objekt, in dem alle zum Ausführen der Aktion erforderlichen Informationen gespeichert werden. Die von dieser Methode dargestellte Abfrage wird erst ausgeführt, wenn das Objekt entweder durch den direkten Aufruf der zugehörigen GetEnumerator-Methode oder mithilfe von foreach in Visual C# oder For Each in Visual Basic aufgelistet wird.

Die Schnittmenge der beiden Mengen A und B wird als die Menge definiert, die alle Elemente von A enthält, die auch in B vorhanden sind, und die keine weiteren Elemente enthält.

Wenn das von dieser Methode zurückgegebene Objekt aufgelistet wird, listet Intersect die Sequenz first auf, wobei alle unterschiedlichen Elemente dieser Sequenz erfasst werden. Anschließend wird second aufgelistet, und die Elemente werden markiert, die in beiden Sequenzen vorhanden sind. Schließlich werden die markierten Elemente in der Reihenfolge zurückgegeben, in der sie erfasst wurden.

Der Standardvergleich auf Gleichheit, Default, wird zum Vergleichen der Typen verwendet, die die generische IEqualityComparer<T>-Schnittstelle implementieren. Zum Vergleichen eines benutzerdefinierten Datentyps müssen Sie diese Schnittstelle implementieren und eine eigene GetHashCode-Methode und Equals-Methode bereitstellen.

Im folgenden Codebeispiel wird veranschaulicht, wie mithilfe von Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) die Elemente zurückgegeben werden, die in beiden Sequenzen von ganzen Zahlen vorhanden sind.


            int[] id1 = { 44, 26, 92, 30, 71, 38 };
            int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

            IEnumerable<int> both = id1.Intersect(id2);

            foreach (int id in both)
                Console.WriteLine(id);

            /*
             This code produces the following output:

             26
             30
            */



Wenn Sie Sequenzen von Objekten eines benutzerdefinierten Datentyps vergleichen möchten, müssen Sie die generische IEqualityComparer<T>-Schnittstelle in einer Hilfsklasse implementieren. Das folgende Codebeispiel zeigt, wie diese Schnittstelle in einem benutzerdefinierten Datentyp implementiert wird und die GetHashCode-Methode und Equals-Methode bereitgestellt werden.


public class ProductA
{ 
    public string Name { get; set; }
    public int Code { get; set; }
}

public class ProductComparer : IEqualityComparer<ProductA>
{

    public bool Equals(ProductA x, ProductA y)
    {
        //Check whether the objects are the same object. 
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether the products' properties are equal. 
        return x != null && y != null && x.Code.Equals(y.Code) && x.Name.Equals(y.Name);
    }

    public int GetHashCode(ProductA obj)
    {
        //Get hash code for the Name field if it is not null. 
        int hashProductName = obj.Name == null ? 0 : obj.Name.GetHashCode();

        //Get hash code for the Code field. 
        int hashProductCode = obj.Code.GetHashCode();

        //Calculate the hash code for the product. 
        return hashProductName ^ hashProductCode;
    }
}


Nachdem Sie diese Schnittstelle implementiert haben, können Sie in der Intersect-Methode Sequenzen von ProductA-Objekten verwenden, wie im folgenden Beispiel gezeigt.


ProductA[] store1 = { new ProductA { Name = "apple", Code = 9 }, 
                       new ProductA { Name = "orange", Code = 4 } };

ProductA[] store2 = { new ProductA { Name = "apple", Code = 9 }, 
                       new ProductA { Name = "lemon", Code = 12 } };


...


// Get the products from the first array 
// that have duplicates in the second array.

IEnumerable<ProductA> duplicates =
    store1.Intersect(store2);

foreach (var product in duplicates)
    Console.WriteLine(product.Name + " " + product.Code);

/*
    This code produces the following output:
    apple 9
*/


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft