Abstraktes Header-Bild in den Farben von tsjdev apps

Blogbeitrag

Extension Methods: Collections

Mit der Hilfe von Extension Methods können wir einem vorhandenen Typen zusätzliche Methoden hinzufügen, ohne einen neuen abgeleiteten Typ zu erstellen und ohne den ursprünglichen Typ bearbeiten zu müssen. Bei Extension Methods handelt es sich um statische Methoden. Im Laufe der Zeit ist eine beachtliche Sammlung an Extension Methods entstanden, welche in den verschiedensten Projekten zum Einsatz kamen und auch immer noch kommen. Ich möchte nun in einer kleinen Serie ein paar Methoden vorstellen, welche vielleicht für den einen oder anderen auch von Interesse sein könnten. Weiter geht es mit Extension Methods zum Typ Collection.

HasItems

Mit der Hilfe von Linq wird eine Methode Any zur Verfügung gestellt, welche verwendet werden kann, um zu überprüfen, ob eine Collection über Einträge verfügt. Wenn allerdings die Collection null ist, so wird eine Exception geschmissen. Daher gibt es mit HasItems eine Kombination aus beiden Tests, um zu überprüfen, ob Einträge in einer Collection vorhanden sind.

public static bool HasItems<T>(this IEnumerable<T> collection)
{
    return collection != null && collection.Any();
}

ToObservableCollection

Manchmal ist es sinnvoll mit einer ObservableCollection zu arbeiten, da diese beispielsweise Events beim Hinzufügen oder Entfernen von Einträgen zur Verfügung steht. Mit der Hilfe der Methode ToObservableCollection lässt sich jede Collection in eine ObservableCollection überführen.

public static ObservableCollection<T> ToObservableCollection<T>(
    this IEnumerable<T> collection)
{
    if (collection == null)
        return new ObservableCollection<T>();

    return new ObservableCollection<T>(collection);
}

AddRange

Zwar bietet eine Collection eine Methode AddRange, um direkt mehrere Einträge hinzufügen zu können, aber die ObservableCollection stellt diese Methode nicht zur Verfügung. Daher gibt es nun ein eigene Implementierung von AddRange, welche diese Funktionalität zur Verfügung stellt.

public static void AddRange<T>(this ObservableCollection<T> targetCollection, 
    IEnumerable<T> sourceCollection)
{
    if (targetCollection == null)
        throw new ArgumentException(nameof(targetCollection));

    if (sourceCollection == null)
        throw new ArgumentException(nameof(sourceCollection));

    foreach (var item in sourceCollection)
        targetCollection.Add(item);
}

GetIndex

Manchmal ist von Interesse zu wissen an welcher Position ein gewisser Eintrag in der Collection ist. Daher ermittelt die Methode GetIndex genau diese Option. Wenn man mit eigenen Datenmodellen arbeitet, sollte man die Methoden Equals und GetHashCode überschreiben, so dass man seine Objekte vergleichen kann.

public static int GetIndex<T>(this IEnumerable<T> collection, 
    T value)
{
    if (collection is IList<T> list)
        return list.IndexOf(value);

    var index = 0;
    foreach (var item in collection)
    {
        if (item.Equals(value))
            return index;

        ++index;
    }

    return -1;
}

In diesem Beitrag habe ich euch einige Extension Methods vorgestellt, welche in verschiedenen Projekten vor mit zum Einsatz gekommen sind oder immer noch kommen. Habt ihr noch weitere Extension Methods für Collections? Dann teilt die doch mit der Community über die Kommentarfunktion zu diesem Beitrag.

Weiterempfehlen

Diesen Beitrag teilen

Wenn dir der Beitrag gefallen hat: gern weiterreichen. Gute Links dürfen sich ruhig schnell verbreiten.

Vorheriger/Nächster Beitrag

Cognitive Services: Alter einer Person ermitteln Vorheriger Beitrag Cognitive Services: Alter einer Person ermitteln Python unter Windows installieren und einrichten Nächster Beitrag Python unter Windows installieren und einrichten
Flags Quiz - Ein interaktives Flaggen-Quiz mit HTML, JavaScript und Bulma Flags Quiz - Ein interaktives Flaggen-Quiz mit HTML, JavaScript und Bulma Sicherheitslücken in verwendeten NuGet-Paketen finden Sicherheitslücken in verwendeten NuGet-Paketen finden Windows Terminal unter Windows 11 mit Oh-My-Posh einrichten Windows Terminal unter Windows 11 mit Oh-My-Posh einrichten Cronjobs in Azure Functions: Zeitgesteuerte Aufgaben mit dem TimerTrigger ausführen Cronjobs in Azure Functions: Zeitgesteuerte Aufgaben mit dem TimerTrigger ausführen
Lust auf ein kurzes digitales Hallo? Wenn du eine Idee teilen, eine Frage loswerden oder ein Projekt anschieben willst: mein Posteingang ist deutlich zuverlässiger als Brieftauben. apps@tsjdev-apps.de Mail schicken