Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Enumerable.Union<TSource>-Methode: (IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

 

Veröffentlicht: Oktober 2016

Erzeugt die Vereinigungsmenge von zwei Sequenzen mithilfe eines angegebenen IEqualityComparer<T>.

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

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

Parameter

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

Ein IEnumerable<T> deren unterschiedliche Elemente die erste Menge für die Gesamtmenge bilden.

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

Ein IEnumerable<T> deren unterschiedliche Elemente die zweite Menge für die Gesamtmenge bilden.

comparer
Type: System.Collections.Generic.IEqualityComparer<TSource>

Die IEqualityComparer<T> zum Vergleichen von Werten.

Rückgabewert

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

Eine IEnumerable<T> die Elemente aus beiden Eingabesequenzen ohne Duplikate enthält.

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 sofortige Rückgabewert ist ein Objekt, das alle Informationen gespeichert hat, die zum Ausführen der Aktion erforderlich sind. Die von dieser Methode dargestellte Abfrage wird nicht ausgeführt, bis das Objekt aufgelistet wird, entweder durch Aufrufen der GetEnumerator -Methode direkt oder mithilfe von foreach in Visual C# oder For Each in Visual Basic.

Wenn comparer ist null, der Standardgleichheitsvergleich Default, wird zum Vergleichen von Werten verwendet.

Wenn das von dieser Methode zurückgegebene Objekt aufgelistet wird, Union<TSource> listet first und second in dieser Reihenfolge und jedes Element, das noch nicht zurückgegeben wurde.

Die Concat<TSource> Methode unterscheidet sich von der Union<TSource> Methode da die Concat<TSource> -Methode alle Elemente in den Eingabesequenzen, einschließlich der Duplikate, zurückgibt, während die Union<TSource> nur eindeutige Werte zurückgibt.

Das folgende Beispiel zeigt, wie einen Gleichheitsvergleich implementiert, die verwendet werden können die Union<TSource> Methode.

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 Sequenzen von Product Objekte in die Union<TSource> Methode, 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 both arrays
//excluding duplicates.

IEnumerable<Product> union =
  store1.Union(store2, new ProductComparer());

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

/*
    This code produces the following output:

    apple 9
    orange 4
    lemon 12
*/

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
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: