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>)

 

Veröffentlicht: Oktober 2016

Erzeugt die Vereinigungsmenge von zwei Sequenzen mithilfe des Standardgleichheitsvergleichs.

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

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

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.

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. Die sofortige ist der Rückgabewert ein Objekt, das alle Informationen gespeichert, die zum Ausführen der Aktion erforderlich ist. 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.

Diese Methode schließt Duplikate aus der zurückgegebenen Menge. Dies ist ein unterschiedliches Verhalten zur der Concat<TSource> -Methode, die alle Elemente in den Eingabesequenzen, einschließlich der Duplikate, zurückgibt.

Der Standardgleichheitsvergleich Default, wird verwendet, um die Werte der Typen verglichen, die Implementierung der IEqualityComparer<T> generische Schnittstelle. Um einen benutzerdefinierten Datentyp zu vergleichen, müssen Sie diese Schnittstelle implementieren, und geben Sie eigene GetHashCode und Equals Methoden für den Typ.

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.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) die Vereinigung von zwei Sequenzen von ganzen Zahlen gebildet.

int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 };

IEnumerable<int> union = ints1.Union(ints2);

foreach (int num in union)
{
    Console.Write("{0} ", num);
}

/*
 This code produces the following output:

 5 3 9 7 8 6 4 1 0
*/

Wenn Sie Sequenzen von Objekten von einem benutzerdefinierten Datentyp vergleichen möchten, müssen Sie implementieren die IEqualityComparer<T> generische Schnittstelle in einem Helperclass. Im folgenden Codebeispiel wird veranschaulicht, wie implementieren diese Schnittstelle in einem benutzerdefinierten Datentyp aus, und geben Sie GetHashCode und Equals Methoden.

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 implementieren, können Sie Sequenzen von ProductA Objekte in die Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) Methode, 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 both arrays
//excluding duplicates.

IEnumerable<ProductA> union =
  store1.Union(store2);

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: