Intersect(TSource) Methode (IEnumerable(TSource), IEnumerable(TSource), IEqualityComparer(TSource))
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>, IEqualityComparer<TSource>)

.NET Framework (current version)
 

Erzeugt mithilfe des angegebenen IEqualityComparer<T> zum Vergleichen von Werten die Schnittmenge von zwei Sequenzen.

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

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

Parameter

first

Ein IEnumerable<T>, dessen unterschiedliche Elemente auch in second vorhanden sind, wird zurückgegeben.

second

Ein IEnumerable<T>, dessen unterschiedliche Elemente auch in der ersten Sequenz vorhanden sind, wird zurückgegeben.

comparer

Ein IEqualityComparer<T> zum Vergleichen von Werten.

Rückgabewert

Type: System.Collections.Generic.IEnumerable<TSource>

Eine Sequenz, die die Elemente enthält, die die Schnittmenge von zwei Sequenzen bilden.

Typparameter

TSource

Der Typ der Elemente der Eingabesequenzen.

Exception Condition
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<TSource> 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.

Wenn comparernull ist, werden Werte mithilfe des Standardgleichheitsvergleichs Default verglichen.

Im folgenden Beispiel wird gezeigt, wie ein Gleichheitsvergleich implementiert wird, der in der Intersect<TSource>-Methode verwendet werden kann.

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

// Custom comparer for the Product class
class ProductComparer : IEqualityComparer<Product>
{
    // Products are equal if their names and product numbers are equal.
    public bool Equals(Product x, Product y)
    {

        //Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether any of the compared objects is null.
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        //Check whether the products' properties are equal.
        return x.Code == y.Code && x.Name == y.Name;
    }

    // If Equals() returns true for a pair of objects 
    // then GetHashCode() must return the same value for these objects.

    public int GetHashCode(Product product)
    {
        //Check whether the object is null
        if (Object.ReferenceEquals(product, null)) return 0;

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

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

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

}

Nachdem Sie diesen Vergleich implementiert haben, können Sie in der Intersect<TSource>-Methode Sequenzen von Product-Objekten verwenden, wie im folgenden Beispiel gezeigt.

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

Product[] store2 = { new Product { Name = "apple", Code = 9 }, 
                       new Product { Name = "lemon", Code = 12 } };
// Get the products from the first array 
// that have duplicates in the second array.

IEnumerable<Product> duplicates =
    store1.Intersect(store2, new ProductComparer());

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

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

Universal Windows Platform
Verfügbar seit 4.5
.NET Framework
Verfügbar seit 3.5
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen:
© 2016 Microsoft