(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.Distinct<TSource>-Methode (IEnumerable<TSource>)

Gibt mithilfe des Standardgleichheitsvergleichs zum Vergleichen von Werten unterschiedliche Elemente aus einer Sequenz zurück.

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

public static IEnumerable<TSource> Distinct<TSource>(
	this IEnumerable<TSource> source
)

Typparameter

TSource

Der Typ der Elemente von source.

Parameter

source
Typ: System.Collections.Generic.IEnumerable<TSource>
Die Sequenz, aus der doppelte Elemente entfernt werden sollen.

Rückgabewert

Typ: System.Collections.Generic.IEnumerable<TSource>
Ein IEnumerable<T>, das unterschiedliche Elemente aus der Quellsequenz enthält.

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

source 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 Distinct<TSource>(IEnumerable<TSource>)-Methode gibt eine ungeordnete Sequenz zurück, die keine doppelten Werte enthält. Sie vergleicht Werte mithilfe des Standardgleichheitsvergleichs Default.

In der Syntax eines Visual Basic-Abfrageausdrucks wird eine Distinct-Klausel in einen Aufruf von Distinct übersetzt.

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

Ein Beispiel für IEqualityComparer<T>, um einen benutzerdefinierten Vergleich definieren, Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>).

Im folgenden Codebeispiel wird veranschaulicht, wie mithilfe von Distinct<TSource>(IEnumerable<TSource>) unterschiedliche Elemente aus einer Sequenz von ganzen Zahlen zurückgegeben werden.


            List<int> ages = new List<int> { 21, 46, 46, 55, 17, 21, 55, 55 };

            IEnumerable<int> distinctAges = ages.Distinct();

            Console.WriteLine("Distinct ages:");

            foreach (int age in distinctAges)
            {
                Console.WriteLine(age);
            }

            /*
             This code produces the following output:

             Distinct ages:
             21
             46
             55
             17
            */



Wenn Sie unterschiedliche Elemente aus Objektsequenzen mit einem benutzerdefinierten Datentyp zurückgeben möchten, müssen Sie die generische IEquatable<T>-Schnittstelle in der Klasse 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 Product : IEquatable<Product>
{
    public string Name { get; set; }
    public int Code { get; set; }

    public bool Equals(Product other)
    {

        //Check whether the compared object is null. 
        if (Object.ReferenceEquals(other, null)) return false;

        //Check whether the compared object references the same data. 
        if (Object.ReferenceEquals(this, other)) return true;

        //Check whether the products' properties are equal. 
        return Code.Equals(other.Code) && Name.Equals(other.Name);
    }

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

    public override int GetHashCode()
    {

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

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

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


Nachdem Sie diese Schnittstelle implementiert haben, können Sie in der Distinct<TSource>(IEnumerable<TSource>)-Methode eine Sequenz von Product-Objekten verwenden, wie im folgenden Beispiel gezeigt.


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

//Exclude duplicates.

IEnumerable<Product> noduplicates =
    products.Distinct();

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

/*
    This code produces the following output:
    apple 9 
    orange 4
    lemon 12
*/


.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
Anzeigen:
© 2014 Microsoft